From 54a7d799d1e9dc7698425b7172a8bf81a4147168 Mon Sep 17 00:00:00 2001 From: Armin Novak Date: Mon, 1 Feb 2016 15:25:40 +0100 Subject: [PATCH] Restructured client project, moved to gradle build. --- client/Android/.gitignore | 15 - client/Android/CMakeLists.txt | 86 +- client/Android/FreeRDPCore/.classpath | 9 - client/Android/FreeRDPCore/.gitignore | 4 - client/Android/FreeRDPCore/.project | 53 - client/Android/FreeRDPCore/CMakeLists.txt | 48 - .../Android/FreeRDPCore/ant.properties.cmake | 20 - client/Android/FreeRDPCore/build.xml.cmake | 92 -- .../Android/FreeRDPCore/jni/Android.mk.cmake | 8 - .../FreeRDPCore/jni/Application.mk.cmake | 1 - client/Android/FreeRDPCore/jni/CMakeLists.txt | 73 - .../Android/FreeRDPCore/jni/android_debug.h | 31 - .../Android/FreeRDPCore/jni/android_freerdp.c | 1290 ----------------- .../Android/FreeRDPCore/jni/android_freerdp.h | 71 - .../jni/generated/android_freerdp_jni.c | 142 -- ..._freerdp_freerdpcore_services_LibFreeRDP.h | 173 --- client/Android/FreeRDPCore/lint.xml | 3 - .../FreeRDPCore/local.properties.cmake | 2 - .../FreeRDPCore/project.properties.cmake | 16 - .../freerdpcore/application/GlobalApp.java | 214 --- .../freerdpcore/services/BookmarkDB.java | 228 --- .../freerdpcore/services/LibFreeRDP.java | 308 ---- .../utils/BuildConfiguration.java.in | 15 - client/Android/ModuleOptions.cmake | 4 - client/Android/Studio/.gitignore | 37 + client/Android/Studio/aFreeRDP/build.gradle | 23 + client/Android/Studio/aFreeRDP/lint.xml | 3 + .../aFreeRDP/src/main/AndroidManifest.xml} | 12 +- .../src/main}/assets/FreeRDP_Logo.png | Bin .../src/main}/assets/about_page/about.html | 0 .../main}/assets/about_page/about_phone.html | 0 .../about_page/background_transparent.png | Bin .../aFreeRDP/src/main}/assets/background.jpg | Bin .../src/main}/assets/de_about_page/about.html | 0 .../assets/de_about_page/about_phone.html | 0 .../de_about_page/background_transparent.png | Bin .../main}/assets/de_help_page/gestures.html | 0 .../main}/assets/de_help_page/gestures.png | Bin .../assets/de_help_page/gestures_phone.html | 0 .../assets/de_help_page/gestures_phone.png | Bin .../assets/de_help_page/nav_gestures.png | Bin .../main}/assets/de_help_page/nav_toolbar.png | Bin .../assets/de_help_page/nav_touch_pointer.png | Bin .../main}/assets/de_help_page/toolbar.html | 0 .../src/main}/assets/de_help_page/toolbar.png | Bin .../assets/de_help_page/toolbar_phone.html | 0 .../assets/de_help_page/toolbar_phone.png | Bin .../assets/de_help_page/touch_pointer.html | 0 .../assets/de_help_page/touch_pointer.png | Bin .../de_help_page/touch_pointer_phone.html | 0 .../de_help_page/touch_pointer_phone.png | Bin .../src/main}/assets/help_page/gestures.html | 0 .../src/main}/assets/help_page/gestures.png | Bin .../assets/help_page/gestures_phone.html | 0 .../main}/assets/help_page/gestures_phone.png | Bin .../main}/assets/help_page/nav_gestures.png | Bin .../main}/assets/help_page/nav_toolbar.png | Bin .../assets/help_page/nav_touch_pointer.png | Bin .../src/main}/assets/help_page/toolbar.html | 0 .../src/main}/assets/help_page/toolbar.png | Bin .../main}/assets/help_page/toolbar_phone.html | 0 .../main}/assets/help_page/toolbar_phone.png | Bin .../main}/assets/help_page/touch_pointer.html | 0 .../main}/assets/help_page/touch_pointer.png | Bin .../assets/help_page/touch_pointer_phone.html | 0 .../assets/help_page/touch_pointer_phone.png | Bin .../afreerdp/application/GlobalApp.java | 0 .../drawable-hdpi/icon_launcher_freerdp.png | Bin .../drawable-ldpi/icon_launcher_freerdp.png | Bin .../drawable-mdpi/icon_launcher_freerdp.png | Bin .../main}/res/drawable/button_background.xml | 0 .../res/drawable/icon_launcher_freerdp.png | Bin .../res/drawable/separator_background.xml | 0 .../src/main}/res/values-es/strings.xml | 2 +- .../src/main}/res/values-fr/strings.xml | 2 +- .../src/main}/res/values-nl/strings.xml | 2 +- .../aFreeRDP/src/main}/res/values/strings.xml | 2 +- .../aFreeRDP/src/main}/res/xml/searchable.xml | 0 client/Android/Studio/build.gradle | 15 + .../Android/Studio/freeRDPCore/build.gradle | 22 + client/Android/Studio/freeRDPCore/lint.xml | 3 + .../freeRDPCore/src/main/AndroidManifest.xml} | 18 +- .../freerdpcore/application/GlobalApp.java | 186 +++ .../application/GlobalSettings.java | 0 .../application/NetworkStateReceiver.java | 0 .../application/ScreenReceiver.java | 0 .../freerdpcore/application/SessionState.java | 0 .../freerdpcore/domain/BookmarkBase.java | 26 +- .../domain/ConnectionReference.java | 0 .../freerdpcore/domain/ManualBookmark.java | 0 .../domain/PlaceholderBookmark.java | 0 .../domain/QuickConnectBookmark.java | 0 .../presentation/AboutActivity.java | 0 .../ApplicationSettingsActivity.java | 0 .../presentation/BookmarkActivity.java | 11 - .../presentation/HelpActivity.java | 0 .../presentation/HomeActivity.java | 0 .../presentation/ScrollView2D.java | 0 .../presentation/SessionActivity.java | 227 +-- .../freerdpcore/presentation/SessionView.java | 4 +- .../presentation/ShortcutsActivity.java | 0 .../presentation/TouchPointerView.java | 0 .../services/BookmarkBaseGateway.java | 0 .../freerdpcore/services/BookmarkDB.java | 227 +++ .../services/FreeRDPSuggestionProvider.java | 0 .../freerdpcore/services/HistoryDB.java | 0 .../freerdpcore/services/LibFreeRDP.java | 373 +++++ .../services/ManualBookmarkGateway.java | 0 .../services/QuickConnectHistoryGateway.java | 0 .../SessionRequestHandlerActivity.java | 0 .../utils/BookmarkArrayAdapter.java | 0 .../freerdpcore/utils/ButtonPreference.java | 0 .../utils/ClipboardManagerProxy.java | 0 .../utils/DoubleGestureDetector.java | 0 .../freerdpcore/utils/GestureDetector.java | 0 .../utils/IntEditTextPreference.java | 0 .../freerdpcore/utils/IntListPreference.java | 0 .../freerdpcore/utils/KeyboardMapper.java | 0 .../com/freerdp/freerdpcore/utils/Mouse.java | 0 .../freerdpcore/utils/RDPFileParser.java | 0 .../utils/SeparatedListAdapter.java | 0 .../res/drawable-hdpi/icon_button_add.png | Bin .../res/drawable-hdpi/icon_edittext_clear.png | Bin .../drawable-hdpi/icon_edittext_search.png | Bin .../drawable-hdpi/icon_launcher_freerdp.png | Bin .../res/drawable-hdpi/icon_menu_about.png | Bin .../main}/res/drawable-hdpi/icon_menu_add.png | Bin .../res/drawable-hdpi/icon_menu_close.png | Bin .../drawable-hdpi/icon_menu_disconnect.png | Bin .../drawable-hdpi/icon_menu_ext_keyboard.png | Bin .../res/drawable-hdpi/icon_menu_help.png | Bin .../drawable-hdpi/icon_menu_preferences.png | Bin .../res/drawable-hdpi/icon_menu_settings.png | Bin .../drawable-hdpi/icon_menu_sys_keyboard.png | Bin .../drawable-hdpi/icon_menu_touch_pointer.png | Bin .../main}/res/drawable-hdpi/icon_star_off.png | Bin .../main}/res/drawable-hdpi/icon_star_on.png | Bin .../res/drawable-hdpi/search_plate.9.png | Bin .../res/drawable-hdpi/sym_keyboard_delete.png | Bin .../sym_keyboard_feedback_delete.png | Bin .../sym_keyboard_feedback_return.png | Bin .../res/drawable-hdpi/sym_keyboard_return.png | Bin .../res/drawable-ldpi/icon_button_add.png | Bin .../drawable-ldpi/icon_edittext_search.png | Bin .../drawable-ldpi/icon_launcher_freerdp.png | Bin .../res/drawable-ldpi/icon_menu_about.png | Bin .../main}/res/drawable-ldpi/icon_menu_add.png | Bin .../drawable-ldpi/icon_menu_disconnect.png | Bin .../res/drawable-ldpi/icon_menu_exit.png | Bin .../drawable-ldpi/icon_menu_ext_keyboard.png | Bin .../res/drawable-ldpi/icon_menu_help.png | Bin .../drawable-ldpi/icon_menu_preferences.png | Bin .../res/drawable-ldpi/icon_menu_settings.png | Bin .../drawable-ldpi/icon_menu_sys_keyboard.png | Bin .../drawable-ldpi/icon_menu_touch_pointer.png | Bin .../main}/res/drawable-ldpi/icon_star_off.png | Bin .../main}/res/drawable-ldpi/icon_star_on.png | Bin .../res/drawable-ldpi/search_plate.9.png | Bin .../res/drawable-ldpi/sym_keyboard_delete.png | Bin .../sym_keyboard_feedback_delete.png | Bin .../sym_keyboard_feedback_return.png | Bin .../res/drawable-ldpi/sym_keyboard_return.png | Bin .../res/drawable-mdpi/icon_button_add.png | Bin .../res/drawable-mdpi/icon_edittext_clear.png | Bin .../drawable-mdpi/icon_edittext_search.png | Bin .../drawable-mdpi/icon_launcher_freerdp.png | Bin .../res/drawable-mdpi/icon_menu_about.png | Bin .../main}/res/drawable-mdpi/icon_menu_add.png | Bin .../drawable-mdpi/icon_menu_disconnect.png | Bin .../res/drawable-mdpi/icon_menu_exit.png | Bin .../drawable-mdpi/icon_menu_ext_keyboard.png | Bin .../res/drawable-mdpi/icon_menu_help.png | Bin .../drawable-mdpi/icon_menu_preferences.png | Bin .../res/drawable-mdpi/icon_menu_settings.png | Bin .../drawable-mdpi/icon_menu_sys_keyboard.png | Bin .../drawable-mdpi/icon_menu_touch_pointer.png | Bin .../main}/res/drawable-mdpi/icon_star_off.png | Bin .../main}/res/drawable-mdpi/icon_star_on.png | Bin .../res/drawable-mdpi/search_plate.9.png | Bin .../res/drawable-mdpi/sym_keyboard_delete.png | Bin .../sym_keyboard_feedback_delete.png | Bin .../sym_keyboard_feedback_return.png | Bin .../res/drawable-mdpi/sym_keyboard_return.png | Bin .../main}/res/drawable/button_background.xml | 0 .../main}/res/drawable/icon_button_cancel.png | Bin .../res/drawable/icon_launcher_freerdp.png | Bin .../res/drawable/separator_background.xml | 0 .../res/drawable/sym_keyboard_arrows.png | Bin .../drawable/sym_keyboard_arrows_black.png | Bin .../res/drawable/sym_keyboard_down_arrow.png | Bin .../sym_keyboard_down_arrow_black.png | Bin .../res/drawable/sym_keyboard_left_arrow.png | Bin .../sym_keyboard_left_arrow_black.png | Bin .../main}/res/drawable/sym_keyboard_menu.png | Bin .../res/drawable/sym_keyboard_menu_black.png | Bin .../res/drawable/sym_keyboard_right_arrow.png | Bin .../sym_keyboard_right_arrow_black.png | Bin .../res/drawable/sym_keyboard_up_arrow.png | Bin .../drawable/sym_keyboard_up_arrow_black.png | Bin .../res/drawable/sym_keyboard_winkey.png | Bin .../drawable/sym_keyboard_winkey_black.png | Bin .../res/drawable/touch_pointer_active.png | Bin .../res/drawable/touch_pointer_default.png | Bin .../drawable/touch_pointer_extkeyboard.png | Bin .../res/drawable/touch_pointer_keyboard.png | Bin .../res/drawable/touch_pointer_lclick.png | Bin .../res/drawable/touch_pointer_rclick.png | Bin .../res/drawable/touch_pointer_reset.png | Bin .../res/drawable/touch_pointer_scroll.png | Bin .../main}/res/layout/bookmark_list_item.xml | 0 .../main}/res/layout/button_preference.xml | 0 .../src/main}/res/layout/credentials.xml | 0 .../res/layout/dont_show_again_dialog.xml | 0 .../freeRDPCore/src/main}/res/layout/home.xml | 2 +- .../src/main}/res/layout/list_header.xml | 0 .../src/main}/res/layout/session.xml | 2 +- .../main}/res/layout/session_list_item.xml | 0 .../src/main}/res/layout/super_bar.xml | 0 .../main}/res/menu/bookmark_context_menu.xml | 0 .../src/main}/res/menu/home_menu.xml | 0 .../src/main}/res/menu/session_menu.xml | 0 .../src/main}/res/values-de/strings.xml | 2 +- .../src/main}/res/values-es/strings.xml | 2 +- .../src/main}/res/values-fr/strings.xml | 0 .../src/main}/res/values-land/dimens.xml | 0 .../src/main}/res/values-nl/strings.xml | 2 +- .../src/main}/res/values-zh/strings.xml | 2 +- .../src/main}/res/values/attrs.xml | 0 .../src/main}/res/values/dimens.xml | 0 .../src/main}/res/values/integers.xml | 0 .../src/main}/res/values/strings.xml | 5 +- .../src/main}/res/values/theme.xml | 2 +- .../src/main}/res/xml/advanced_settings.xml | 0 .../main}/res/xml/application_settings.xml | 0 .../src/main}/res/xml/bookmark_settings.xml | 0 .../main}/res/xml/credentials_settings.xml | 0 .../src/main}/res/xml/cursor_keyboard.xml | 0 .../src/main}/res/xml/debug_settings.xml | 0 .../src/main}/res/xml/gateway_settings.xml | 0 .../src/main}/res/xml/modifiers_keyboard.xml | 0 .../src/main}/res/xml/numpad_keyboard.xml | 0 .../src/main}/res/xml/performance_flags.xml | 8 +- .../main}/res/xml/performance_flags_3g.xml | 0 .../src/main}/res/xml/screen_settings.xml | 0 .../src/main}/res/xml/screen_settings_3g.xml | 0 .../main}/res/xml/specialkeys_keyboard.xml | 0 .../Studio/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53637 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + client/Android/Studio/gradlew | 160 ++ client/Android/Studio/gradlew.bat | 90 ++ client/Android/Studio/settings.gradle | 2 + client/Android/aFreeRDP/.classpath | 9 - client/Android/aFreeRDP/.gitignore | 4 - client/Android/aFreeRDP/.project | 98 -- client/Android/aFreeRDP/CMakeLists.txt | 74 - client/Android/aFreeRDP/ant.properties.cmake | 19 - client/Android/aFreeRDP/build.xml.cmake | 91 -- client/Android/aFreeRDP/jni/Android.mk.cmake | 1 - .../Android/aFreeRDP/jni/Application.mk.cmake | 1 - client/Android/aFreeRDP/jni/CMakeLists.txt | 22 - client/Android/aFreeRDP/lint.xml | 3 - .../Android/aFreeRDP/local.properties.cmake | 2 - client/Android/aFreeRDP/proguard-project.txt | 20 - .../Android/aFreeRDP/project.properties.cmake | 13 - .../{FreeRDPCore/jni => }/android_cliprdr.c | 1 - .../{FreeRDPCore/jni => }/android_cliprdr.h | 2 + .../{FreeRDPCore/jni => }/android_event.c | 208 +-- .../{FreeRDPCore/jni => }/android_event.h | 23 +- client/Android/android_freerdp.c | 1148 +++++++++++++++ client/Android/android_freerdp.h | 45 + .../jni/generated => }/android_freerdp_jni.h | 4 +- .../jni => }/android_jni_callback.c | 39 +- .../jni => }/android_jni_callback.h | 2 +- .../{FreeRDPCore/jni => }/android_jni_utils.c | 59 +- .../{FreeRDPCore/jni => }/android_jni_utils.h | 5 +- 275 files changed, 2711 insertions(+), 3568 deletions(-) delete mode 100644 client/Android/.gitignore delete mode 100644 client/Android/FreeRDPCore/.classpath delete mode 100644 client/Android/FreeRDPCore/.gitignore delete mode 100644 client/Android/FreeRDPCore/.project delete mode 100644 client/Android/FreeRDPCore/CMakeLists.txt delete mode 100644 client/Android/FreeRDPCore/ant.properties.cmake delete mode 100644 client/Android/FreeRDPCore/build.xml.cmake delete mode 100644 client/Android/FreeRDPCore/jni/Android.mk.cmake delete mode 100644 client/Android/FreeRDPCore/jni/Application.mk.cmake delete mode 100644 client/Android/FreeRDPCore/jni/CMakeLists.txt delete mode 100644 client/Android/FreeRDPCore/jni/android_debug.h delete mode 100644 client/Android/FreeRDPCore/jni/android_freerdp.c delete mode 100644 client/Android/FreeRDPCore/jni/android_freerdp.h delete mode 100644 client/Android/FreeRDPCore/jni/generated/android_freerdp_jni.c delete mode 100644 client/Android/FreeRDPCore/jni/generated/com_freerdp_freerdpcore_services_LibFreeRDP.h delete mode 100644 client/Android/FreeRDPCore/lint.xml delete mode 100644 client/Android/FreeRDPCore/local.properties.cmake delete mode 100644 client/Android/FreeRDPCore/project.properties.cmake delete mode 100644 client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/GlobalApp.java delete mode 100644 client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkDB.java delete mode 100644 client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/LibFreeRDP.java delete mode 100644 client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/BuildConfiguration.java.in delete mode 100644 client/Android/ModuleOptions.cmake create mode 100644 client/Android/Studio/.gitignore create mode 100644 client/Android/Studio/aFreeRDP/build.gradle create mode 100644 client/Android/Studio/aFreeRDP/lint.xml rename client/Android/{aFreeRDP/AndroidManifest.xml.cmake => Studio/aFreeRDP/src/main/AndroidManifest.xml} (90%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/FreeRDP_Logo.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/about_page/about.html (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/about_page/about_phone.html (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/about_page/background_transparent.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/background.jpg (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/de_about_page/about.html (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/de_about_page/about_phone.html (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/de_about_page/background_transparent.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/de_help_page/gestures.html (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/de_help_page/gestures.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/de_help_page/gestures_phone.html (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/de_help_page/gestures_phone.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/de_help_page/nav_gestures.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/de_help_page/nav_toolbar.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/de_help_page/nav_touch_pointer.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/de_help_page/toolbar.html (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/de_help_page/toolbar.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/de_help_page/toolbar_phone.html (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/de_help_page/toolbar_phone.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/de_help_page/touch_pointer.html (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/de_help_page/touch_pointer.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/de_help_page/touch_pointer_phone.html (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/de_help_page/touch_pointer_phone.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/help_page/gestures.html (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/help_page/gestures.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/help_page/gestures_phone.html (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/help_page/gestures_phone.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/help_page/nav_gestures.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/help_page/nav_toolbar.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/help_page/nav_touch_pointer.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/help_page/toolbar.html (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/help_page/toolbar.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/help_page/toolbar_phone.html (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/help_page/toolbar_phone.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/help_page/touch_pointer.html (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/help_page/touch_pointer.png (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/help_page/touch_pointer_phone.html (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/assets/help_page/touch_pointer_phone.png (100%) rename client/Android/{aFreeRDP/src => Studio/aFreeRDP/src/main/java}/com/freerdp/afreerdp/application/GlobalApp.java (100%) rename client/Android/{FreeRDPCore => Studio/aFreeRDP/src/main}/res/drawable-hdpi/icon_launcher_freerdp.png (100%) rename client/Android/{FreeRDPCore => Studio/aFreeRDP/src/main}/res/drawable-ldpi/icon_launcher_freerdp.png (100%) rename client/Android/{FreeRDPCore => Studio/aFreeRDP/src/main}/res/drawable-mdpi/icon_launcher_freerdp.png (100%) rename client/Android/{FreeRDPCore => Studio/aFreeRDP/src/main}/res/drawable/button_background.xml (100%) rename client/Android/{FreeRDPCore => Studio/aFreeRDP/src/main}/res/drawable/icon_launcher_freerdp.png (100%) rename client/Android/{FreeRDPCore => Studio/aFreeRDP/src/main}/res/drawable/separator_background.xml (100%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/res/values-es/strings.xml (80%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/res/values-fr/strings.xml (80%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/res/values-nl/strings.xml (80%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/res/values/strings.xml (80%) rename client/Android/{aFreeRDP => Studio/aFreeRDP/src/main}/res/xml/searchable.xml (100%) create mode 100644 client/Android/Studio/build.gradle create mode 100644 client/Android/Studio/freeRDPCore/build.gradle create mode 100644 client/Android/Studio/freeRDPCore/lint.xml rename client/Android/{FreeRDPCore/AndroidManifest.xml.cmake => Studio/freeRDPCore/src/main/AndroidManifest.xml} (86%) create mode 100644 client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/application/GlobalApp.java rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/application/GlobalSettings.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/application/NetworkStateReceiver.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/application/ScreenReceiver.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/application/SessionState.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/domain/BookmarkBase.java (98%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/domain/ConnectionReference.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/domain/ManualBookmark.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/domain/PlaceholderBookmark.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/domain/QuickConnectBookmark.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/presentation/AboutActivity.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/presentation/ApplicationSettingsActivity.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/presentation/BookmarkActivity.java (98%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/presentation/HelpActivity.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/presentation/HomeActivity.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/presentation/ScrollView2D.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/presentation/SessionActivity.java (91%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/presentation/SessionView.java (99%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/presentation/ShortcutsActivity.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/presentation/TouchPointerView.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/services/BookmarkBaseGateway.java (100%) create mode 100644 client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/BookmarkDB.java rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/services/FreeRDPSuggestionProvider.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/services/HistoryDB.java (100%) create mode 100644 client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/LibFreeRDP.java rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/services/ManualBookmarkGateway.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/services/QuickConnectHistoryGateway.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/services/SessionRequestHandlerActivity.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/utils/BookmarkArrayAdapter.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/utils/ButtonPreference.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/utils/ClipboardManagerProxy.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/utils/DoubleGestureDetector.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/utils/GestureDetector.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/utils/IntEditTextPreference.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/utils/IntListPreference.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/utils/KeyboardMapper.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/utils/Mouse.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/utils/RDPFileParser.java (100%) rename client/Android/{FreeRDPCore/src => Studio/freeRDPCore/src/main/java}/com/freerdp/freerdpcore/utils/SeparatedListAdapter.java (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/icon_button_add.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/icon_edittext_clear.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/icon_edittext_search.png (100%) rename client/Android/{aFreeRDP => Studio/freeRDPCore/src/main}/res/drawable-hdpi/icon_launcher_freerdp.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/icon_menu_about.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/icon_menu_add.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/icon_menu_close.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/icon_menu_disconnect.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/icon_menu_ext_keyboard.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/icon_menu_help.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/icon_menu_preferences.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/icon_menu_settings.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/icon_menu_sys_keyboard.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/icon_menu_touch_pointer.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/icon_star_off.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/icon_star_on.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/search_plate.9.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/sym_keyboard_delete.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/sym_keyboard_feedback_delete.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/sym_keyboard_feedback_return.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-hdpi/sym_keyboard_return.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/icon_button_add.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/icon_edittext_search.png (100%) rename client/Android/{aFreeRDP => Studio/freeRDPCore/src/main}/res/drawable-ldpi/icon_launcher_freerdp.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/icon_menu_about.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/icon_menu_add.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/icon_menu_disconnect.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/icon_menu_exit.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/icon_menu_ext_keyboard.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/icon_menu_help.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/icon_menu_preferences.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/icon_menu_settings.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/icon_menu_sys_keyboard.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/icon_menu_touch_pointer.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/icon_star_off.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/icon_star_on.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/search_plate.9.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/sym_keyboard_delete.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/sym_keyboard_feedback_delete.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/sym_keyboard_feedback_return.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-ldpi/sym_keyboard_return.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/icon_button_add.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/icon_edittext_clear.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/icon_edittext_search.png (100%) rename client/Android/{aFreeRDP => Studio/freeRDPCore/src/main}/res/drawable-mdpi/icon_launcher_freerdp.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/icon_menu_about.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/icon_menu_add.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/icon_menu_disconnect.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/icon_menu_exit.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/icon_menu_ext_keyboard.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/icon_menu_help.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/icon_menu_preferences.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/icon_menu_settings.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/icon_menu_sys_keyboard.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/icon_menu_touch_pointer.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/icon_star_off.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/icon_star_on.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/search_plate.9.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/sym_keyboard_delete.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/sym_keyboard_feedback_delete.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/sym_keyboard_feedback_return.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable-mdpi/sym_keyboard_return.png (100%) rename client/Android/{aFreeRDP => Studio/freeRDPCore/src/main}/res/drawable/button_background.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/icon_button_cancel.png (100%) rename client/Android/{aFreeRDP => Studio/freeRDPCore/src/main}/res/drawable/icon_launcher_freerdp.png (100%) rename client/Android/{aFreeRDP => Studio/freeRDPCore/src/main}/res/drawable/separator_background.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/sym_keyboard_arrows.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/sym_keyboard_arrows_black.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/sym_keyboard_down_arrow.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/sym_keyboard_down_arrow_black.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/sym_keyboard_left_arrow.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/sym_keyboard_left_arrow_black.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/sym_keyboard_menu.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/sym_keyboard_menu_black.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/sym_keyboard_right_arrow.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/sym_keyboard_right_arrow_black.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/sym_keyboard_up_arrow.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/sym_keyboard_up_arrow_black.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/sym_keyboard_winkey.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/sym_keyboard_winkey_black.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/touch_pointer_active.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/touch_pointer_default.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/touch_pointer_extkeyboard.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/touch_pointer_keyboard.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/touch_pointer_lclick.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/touch_pointer_rclick.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/touch_pointer_reset.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/drawable/touch_pointer_scroll.png (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/layout/bookmark_list_item.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/layout/button_preference.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/layout/credentials.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/layout/dont_show_again_dialog.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/layout/home.xml (96%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/layout/list_header.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/layout/session.xml (98%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/layout/session_list_item.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/layout/super_bar.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/menu/bookmark_context_menu.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/menu/home_menu.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/menu/session_menu.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/values-de/strings.xml (99%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/values-es/strings.xml (97%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/values-fr/strings.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/values-land/dimens.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/values-nl/strings.xml (99%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/values-zh/strings.xml (99%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/values/attrs.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/values/dimens.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/values/integers.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/values/strings.xml (98%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/values/theme.xml (98%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/xml/advanced_settings.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/xml/application_settings.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/xml/bookmark_settings.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/xml/credentials_settings.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/xml/cursor_keyboard.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/xml/debug_settings.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/xml/gateway_settings.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/xml/modifiers_keyboard.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/xml/numpad_keyboard.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/xml/performance_flags.xml (77%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/xml/performance_flags_3g.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/xml/screen_settings.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/xml/screen_settings_3g.xml (100%) rename client/Android/{FreeRDPCore => Studio/freeRDPCore/src/main}/res/xml/specialkeys_keyboard.xml (100%) create mode 100644 client/Android/Studio/gradle/wrapper/gradle-wrapper.jar create mode 100644 client/Android/Studio/gradle/wrapper/gradle-wrapper.properties create mode 100755 client/Android/Studio/gradlew create mode 100644 client/Android/Studio/gradlew.bat create mode 100644 client/Android/Studio/settings.gradle delete mode 100644 client/Android/aFreeRDP/.classpath delete mode 100644 client/Android/aFreeRDP/.gitignore delete mode 100644 client/Android/aFreeRDP/.project delete mode 100644 client/Android/aFreeRDP/CMakeLists.txt delete mode 100644 client/Android/aFreeRDP/ant.properties.cmake delete mode 100644 client/Android/aFreeRDP/build.xml.cmake delete mode 100644 client/Android/aFreeRDP/jni/Android.mk.cmake delete mode 100644 client/Android/aFreeRDP/jni/Application.mk.cmake delete mode 100644 client/Android/aFreeRDP/jni/CMakeLists.txt delete mode 100644 client/Android/aFreeRDP/lint.xml delete mode 100644 client/Android/aFreeRDP/local.properties.cmake delete mode 100644 client/Android/aFreeRDP/proguard-project.txt delete mode 100644 client/Android/aFreeRDP/project.properties.cmake rename client/Android/{FreeRDPCore/jni => }/android_cliprdr.c (99%) rename client/Android/{FreeRDPCore/jni => }/android_cliprdr.h (96%) rename client/Android/{FreeRDPCore/jni => }/android_event.c (63%) rename client/Android/{FreeRDPCore/jni => }/android_event.h (68%) create mode 100644 client/Android/android_freerdp.c create mode 100644 client/Android/android_freerdp.h rename client/Android/{FreeRDPCore/jni/generated => }/android_freerdp_jni.h (90%) rename client/Android/{FreeRDPCore/jni => }/android_jni_callback.c (82%) rename client/Android/{FreeRDPCore/jni => }/android_jni_callback.h (93%) rename client/Android/{FreeRDPCore/jni => }/android_jni_utils.c (79%) rename client/Android/{FreeRDPCore/jni => }/android_jni_utils.h (89%) diff --git a/client/Android/.gitignore b/client/Android/.gitignore deleted file mode 100644 index 5eb07b8f5..000000000 --- a/client/Android/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -# Ignore directories -bin/ -obj/ -gen/ -jni/external/* -!libs -libs/armeabi* -AndroidManifest.xml -local.properties -!.project -appcompat_v7 - -FreeRDPCore/project.properties -FreeRDPCore/src/com/freerdp/freerdpcore/utils/BuildConfiguration.java -aFreeRDP/project.properties diff --git a/client/Android/CMakeLists.txt b/client/Android/CMakeLists.txt index 1ddef5ba6..d238eb6d2 100644 --- a/client/Android/CMakeLists.txt +++ b/client/Android/CMakeLists.txt @@ -1,6 +1,7 @@ # FreeRDP: A Remote Desktop Protocol Implementation # Android Client # +# Copyright 2012 Marc-Andre Moreau # Copyright 2013 Bernhard Miklautz # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,68 +16,39 @@ # See the License for the specific language governing permissions and # limitations under the License. -if (NOT ANDROID_NDK) - message(FATAL_ERROR "ANDROID_NDK not set but required for building android native library.") +set(MODULE_NAME "freerdp-android") +set(MODULE_PREFIX "FREERDP_CLIENT_ANDROID") + +include_directories(.) + +if(CMAKE_COMPILER_IS_GNUCC) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-pointer-sign") endif() -set(CMAKE_PROGRAM_PATH ${ANDROID_NDK}) -find_program(NDK_COMMAND ndk-build CMAKE_FIND_ROOT_PATH_BOTH) +set(${MODULE_PREFIX}_SRCS + android_event.c + android_event.h + android_freerdp.c + android_freerdp.h + android_jni_utils.c + android_jni_utils.h + android_jni_callback.c + android_jni_callback.h) -if(NDK_COMMAND STREQUAL "NDK_COMMAND-NOTFOUND") - message(FATAL_ERROR "ndk-build not found but required to build native lib") +if(WITH_CLIENT_CHANNELS) + set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} + android_cliprdr.c + android_cliprdr.h) endif() -set(NDK_LIB_CFG "${CMAKE_CURRENT_BINARY_DIR}/FreeRDPCore/jni/Android.mk") -if(ANDROID_BUILD_JAVA) - if (NOT ANDROID_SDK) - message(FATAL_ERROR "ANDROID_SDK not set but required for building the java gui (ANDROID_BUILD_JAVA)") - endif() - # And isn't shiped with the android ndk/sdk so - # we need to find it on the local machine - SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM BOTH) - find_program(ANT_COMMAND ant) - SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY) +add_library(${MODULE_NAME} SHARED ${${MODULE_PREFIX}_SRCS}) - if(ANT_COMMAND STREQUAL "ANT_COMMAND-NOTFOUND") - message(FATAL_ERROR "ant not found but required to build android java") - endif() -endif(ANDROID_BUILD_JAVA) +set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp-client) +set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} winpr freerdp) -set(ANDROID_COMMAND "${ANDROID_SDK}/tools/android") -if(NOT EXISTS ${ANDROID_COMMAND}) - message(FATAL_ERROR "android not found but required to build android java") -endif() +set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} dl) +set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} log) +set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} jnigraphics) -if(ANDROID_BUILD_JAVA_DEBUG) - set(ANDROID_BUILD_TYPE "debug") -else() - set(ANDROID_BUILD_TYPE "release") -endif() - -if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") - set(ANDROID_DEBUG_ENABLE "true") - set(NDK_DEBUG "1") -else() - set(ANDROID_DEBUG_ENABLE "false") - set(NDK_DEBUG "0") -endif() - -set(APPCOMPAT_DIR "${CMAKE_CURRENT_BINARY_DIR}/appcompat_v7") -set(supportdir "${ANDROID_SDK}/extras/android/support/v7/appcompat") -set(compatibilitydir "${ANDROID_SDK}/extras/android/compatibility/v7/appcompat") -if(EXISTS "${supportdir}" AND IS_DIRECTORY "${supportdir}") - add_custom_target(copy_appcompat ALL - COMMAND ${CMAKE_COMMAND} -E copy_directory "${supportdir}" ${APPCOMPAT_DIR} - COMMAND ${ANDROID_COMMAND} update lib-project -p ${APPCOMPAT_DIR} -t android-${ANDROID_APP_TARGET_SDK} - ) -elseif(EXISTS "${compatibilitydir}" AND IS_DIRECTORY "${compatibilitydir}") - add_custom_target(copy_appcompat ALL - COMMAND ${CMAKE_COMMAND} -E copy_directory "${compatibilitydir}" ${APPCOMPAT_DIR} - COMMAND ${ANDROID_COMMAND} update lib-project -p ${APPCOMPAT_DIR} -t android-${ANDROID_APP_TARGET_SDK} - ) -else() - message( FATAL_ERROR "${ANDROID_SDK}/extras/android/{support|compatibility}/v7/appcompat directory not found. Please install a recent version of Android Support Library, CMake will now exit." ) -endif() - -add_subdirectory(FreeRDPCore) -add_subdirectory(aFreeRDP) +target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) +install(TARGETS ${MODULE_NAME} DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT libraries EXPORT AndroidTargets) diff --git a/client/Android/FreeRDPCore/.classpath b/client/Android/FreeRDPCore/.classpath deleted file mode 100644 index 51769745b..000000000 --- a/client/Android/FreeRDPCore/.classpath +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/client/Android/FreeRDPCore/.gitignore b/client/Android/FreeRDPCore/.gitignore deleted file mode 100644 index 2d8df2acd..000000000 --- a/client/Android/FreeRDPCore/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -ant.properties -build.xml -jni/Android.mk -jni/Application.mk diff --git a/client/Android/FreeRDPCore/.project b/client/Android/FreeRDPCore/.project deleted file mode 100644 index bfc09afd1..000000000 --- a/client/Android/FreeRDPCore/.project +++ /dev/null @@ -1,53 +0,0 @@ - - - FreeRDPCore - - - - - - org.eclipse.ui.externaltools.ExternalToolBuilder - full,incremental, - - - LaunchConfigHandle - <project>/.externalToolBuilders/org.eclipse.cdt.managedbuilder.core.genmakebuilder.launch - - - - - com.android.ide.eclipse.adt.ResourceManagerBuilder - - - - - com.android.ide.eclipse.adt.PreCompilerBuilder - - - - - org.eclipse.jdt.core.javabuilder - - - - - com.android.ide.eclipse.adt.ApkBuilder - - - - - org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder - full,incremental, - - - - - - com.android.ide.eclipse.adt.AndroidNature - org.eclipse.jdt.core.javanature - org.eclipse.cdt.core.cnature - org.eclipse.cdt.core.ccnature - org.eclipse.cdt.managedbuilder.core.managedBuildNature - org.eclipse.cdt.managedbuilder.core.ScannerConfigNature - - diff --git a/client/Android/FreeRDPCore/CMakeLists.txt b/client/Android/FreeRDPCore/CMakeLists.txt deleted file mode 100644 index a95f11f2d..000000000 --- a/client/Android/FreeRDPCore/CMakeLists.txt +++ /dev/null @@ -1,48 +0,0 @@ -# FreeRDP: A Remote Desktop Protocol Implementation -# Android Client -# -# Copyright 2012 Marc-Andre Moreau -# Copyright 2013 Bernhard Miklautz -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -set(ANDROID_PACKAGE_NAME "aFreeRDPCore") - -CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/AndroidManifest.xml.cmake - ${CMAKE_CURRENT_BINARY_DIR}/AndroidManifest.xml @ONLY) -CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/build.xml.cmake - ${CMAKE_CURRENT_BINARY_DIR}/build.xml @ONLY) -CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/project.properties.cmake - ${CMAKE_CURRENT_BINARY_DIR}/project.properties @ONLY) -CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/ant.properties.cmake - ${CMAKE_CURRENT_BINARY_DIR}/ant.properties @ONLY) - -# Generate a Java class with static members set to the CMake -# configuration properties. -set(JAVA_CFG "src/com/freerdp/freerdpcore/utils/BuildConfiguration.java") -set(JAVA_CFG_OUT "${CMAKE_CURRENT_BINARY_DIR}/${JAVA_CFG}") -set(JAVA_CFG_IN "${CMAKE_CURRENT_SOURCE_DIR}/${JAVA_CFG}.in") - -CONFIGURE_FILE(${JAVA_CFG_IN} ${JAVA_CFG_OUT}) - -file(COPY res DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) - -if (ANDROID_SDK) - CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/local.properties.cmake - ${CMAKE_CURRENT_BINARY_DIR}/local.properties @ONLY) -endif() - -add_subdirectory(jni) - -SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "gen;bin;obj;libs") - diff --git a/client/Android/FreeRDPCore/ant.properties.cmake b/client/Android/FreeRDPCore/ant.properties.cmake deleted file mode 100644 index 83cd860ec..000000000 --- a/client/Android/FreeRDPCore/ant.properties.cmake +++ /dev/null @@ -1,20 +0,0 @@ -# This file is used to override default values used by the Ant build system. -# -# This file must be checked into Version Control Systems, as it is -# integral to the build system of your project. - -# This file is only used by the Ant script. - -# You can use this to override default values such as -# 'source.dir' for the location of your java source folder and -# 'out.dir' for the location of your output folder. - -# You can also use it define how the release builds are signed by declaring -# the following properties: -# 'key.store' for the location of your keystore and -# 'key.alias' for the name of the key to use. -# The password will be asked during the build when you use the 'release' target. -build.dir=@CMAKE_CURRENT_BINARY_DIR@ -source.path=@CMAKE_CURRENT_SOURCE_DIR@/src:@CMAKE_CURRENT_BINARY_DIR@/src -out.dir=@CMAKE_CURRENT_BINARY_DIR@/bin - diff --git a/client/Android/FreeRDPCore/build.xml.cmake b/client/Android/FreeRDPCore/build.xml.cmake deleted file mode 100644 index f07d7de42..000000000 --- a/client/Android/FreeRDPCore/build.xml.cmake +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/client/Android/FreeRDPCore/jni/Android.mk.cmake b/client/Android/FreeRDPCore/jni/Android.mk.cmake deleted file mode 100644 index 94452ea92..000000000 --- a/client/Android/FreeRDPCore/jni/Android.mk.cmake +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_MODULE := freerdp-android -LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libfreerdp-android.so -LOCAL_EXPORT_C_INCLUDES := ../../../../include -include $(PREBUILT_SHARED_LIBRARY) diff --git a/client/Android/FreeRDPCore/jni/Application.mk.cmake b/client/Android/FreeRDPCore/jni/Application.mk.cmake deleted file mode 100644 index 3655c4062..000000000 --- a/client/Android/FreeRDPCore/jni/Application.mk.cmake +++ /dev/null @@ -1 +0,0 @@ -APP_ABI := @ANDROID_ABI@ diff --git a/client/Android/FreeRDPCore/jni/CMakeLists.txt b/client/Android/FreeRDPCore/jni/CMakeLists.txt deleted file mode 100644 index 2b704b79d..000000000 --- a/client/Android/FreeRDPCore/jni/CMakeLists.txt +++ /dev/null @@ -1,73 +0,0 @@ -# FreeRDP: A Remote Desktop Protocol Implementation -# Android Client -# -# Copyright 2012 Marc-Andre Moreau -# Copyright 2013 Bernhard Miklautz -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -set(MODULE_NAME "freerdp-android") -set(MODULE_PREFIX "FREERDP_CLIENT_ANDROID") - -include_directories(.) -include_directories(generated) - -CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/Application.mk.cmake - ${CMAKE_CURRENT_BINARY_DIR}/Application.mk @ONLY) -CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/Android.mk.cmake - ${CMAKE_CURRENT_BINARY_DIR}/Android.mk @ONLY) - -if(CMAKE_COMPILER_IS_GNUCC) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-pointer-sign") -endif() - -set(${MODULE_PREFIX}_SRCS - android_debug.h - android_event.c - android_event.h - android_freerdp.c - android_freerdp.h - android_jni_utils.c - android_jni_utils.h - android_jni_callback.c - android_jni_callback.h) - -set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} - generated/android_freerdp_jni.c - generated/android_freerdp_jni.h) - -if(WITH_CLIENT_CHANNELS) - set(${MODULE_PREFIX}_SRCS ${${MODULE_PREFIX}_SRCS} - android_cliprdr.c - android_cliprdr.h) -endif() - -add_library(${MODULE_NAME} SHARED ${${MODULE_PREFIX}_SRCS}) - -set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} freerdp-client) -set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} winpr freerdp) - -set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} dl) -set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} log) -set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} jnigraphics) - -target_link_libraries(${MODULE_NAME} ${${MODULE_PREFIX}_LIBS}) - -file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${ANDROID_ABI}") -set_target_properties(${MODULE_NAME} - PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${ANDROID_ABI}") - -set_property(TARGET ${MODULE_NAME} PROPERTY FOLDER "Client/Android") - -get_property(LIB_ABSNAME TARGET ${MODULE_NAME} PROPERTY LOCATION) - diff --git a/client/Android/FreeRDPCore/jni/android_debug.h b/client/Android/FreeRDPCore/jni/android_debug.h deleted file mode 100644 index b48e7f469..000000000 --- a/client/Android/FreeRDPCore/jni/android_debug.h +++ /dev/null @@ -1,31 +0,0 @@ -/** - * FreeRDP: A Remote Desktop Protocol Implementation - * Android Debug Interface - * - * Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#ifndef FREERDP_ANDROID_DEBUG_H -#define FREERDP_ANDROID_DEBUG_H - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#define ANDROID_TAG CLIENT_TAG("android") -#ifdef WITH_DEBUG_ANDROID_JNI -#define DEBUG_ANDROID(fmt, ...) WLog_DBG(ANDROID_TAG, fmt, ## __VA_ARGS__) -#else -#define DEBUG_ANDROID(fmt, ...) do { } while (0) -#endif - - - -#endif /* FREERDP_ANDROID_DEBUG_H */ - diff --git a/client/Android/FreeRDPCore/jni/android_freerdp.c b/client/Android/FreeRDPCore/jni/android_freerdp.c deleted file mode 100644 index 01bc19122..000000000 --- a/client/Android/FreeRDPCore/jni/android_freerdp.c +++ /dev/null @@ -1,1290 +0,0 @@ -/* - Android JNI Client Layer - - Copyright 2010-2012 Marc-Andre Moreau - Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz - Copyright 2013 Thincast Technologies GmbH, Author: Armin Novak - Copyright 2015 Bernhard Miklautz - - This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. - If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. -*/ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "android_freerdp.h" -#include "android_jni_callback.h" -#include "android_jni_utils.h" -#include "android_debug.h" -#include "android_cliprdr.h" - -#if defined(WITH_GPROF) -#include "jni/prof.h" -#endif - - -static BOOL android_context_new(freerdp* instance, rdpContext* context) -{ - if (!(context->channels = freerdp_channels_new())) - return FALSE; - - if (!android_event_queue_init(instance)) - { - freerdp_channels_free(context->channels); - return FALSE; - } - return TRUE; -} - -static void android_context_free(freerdp* instance, rdpContext* context) -{ - if (context && context->channels) - { - freerdp_channels_close(context->channels, instance); - freerdp_channels_free(context->channels); - context->channels = NULL; - } - android_event_queue_uninit(instance); -} - -static void android_OnChannelConnectedEventHandler(rdpContext* context, ChannelConnectedEventArgs* e) -{ - rdpSettings* settings = context->settings; - androidContext* afc = (androidContext*) context; - - if (strcmp(e->name, RDPEI_DVC_CHANNEL_NAME) == 0) - { - DEBUG_ANDROID("Unhandled case.. RDPEI_DVC_CHANNEL_NAME"); - } - else if (strcmp(e->name, RDPGFX_DVC_CHANNEL_NAME) == 0) - { - if (settings->SoftwareGdi) - gdi_graphics_pipeline_init(context->gdi, (RdpgfxClientContext*) e->pInterface); - } - else if (strcmp(e->name, CLIPRDR_SVC_CHANNEL_NAME) == 0) - { - android_cliprdr_init(afc, (CliprdrClientContext*) e->pInterface); - } -} - -static void android_OnChannelDisconnectedEventHandler(rdpContext* context, ChannelDisconnectedEventArgs* e) -{ - rdpSettings* settings = context->settings; - androidContext* afc = (androidContext*) context; - - if (strcmp(e->name, RDPEI_DVC_CHANNEL_NAME) == 0) - { - DEBUG_ANDROID("Unhandled case.. RDPEI_DVC_CHANNEL_NAME"); - } - else if (strcmp(e->name, RDPGFX_DVC_CHANNEL_NAME) == 0) - { - if (settings->SoftwareGdi) - gdi_graphics_pipeline_uninit(context->gdi, (RdpgfxClientContext*) e->pInterface); - } - else if (strcmp(e->name, CLIPRDR_SVC_CHANNEL_NAME) == 0) - { - android_cliprdr_uninit(afc, (CliprdrClientContext*) e->pInterface); - } -} - -static BOOL android_begin_paint(rdpContext* context) -{ - rdpGdi* gdi = context->gdi; - gdi->primary->hdc->hwnd->invalid->null = 1; - gdi->primary->hdc->hwnd->ninvalid = 0; - return TRUE; -} - -static BOOL android_end_paint(rdpContext* context) -{ - int i; - int ninvalid; - HGDI_RGN cinvalid; - int x1, y1, x2, y2; - androidContext *ctx = (androidContext*)context; - rdpSettings* settings = context->instance->settings; - - assert(ctx); - assert(settings); - assert(context->instance); - - ninvalid = ctx->rdpCtx.gdi->primary->hdc->hwnd->ninvalid; - if (ninvalid == 0) - { - DEBUG_ANDROID("ui_update: ninvalid=%d", ninvalid); - return TRUE; - } - - cinvalid = ctx->rdpCtx.gdi->primary->hdc->hwnd->cinvalid; - - x1 = cinvalid[0].x; - y1 = cinvalid[0].y; - x2 = cinvalid[0].x + cinvalid[0].w; - y2 = cinvalid[0].y + cinvalid[0].h; - - for (i = 0; i < ninvalid; i++) - { - x1 = MIN(x1, cinvalid[i].x); - y1 = MIN(y1, cinvalid[i].y); - x2 = MAX(x2, cinvalid[i].x + cinvalid[i].w); - y2 = MAX(y2, cinvalid[i].y + cinvalid[i].h); - } - - DEBUG_ANDROID("ui_update: ninvalid=%d x=%d, y=%d, width=%d, height=%d, bpp=%d", - ninvalid, x1, y1, x2 - x1, y2 - y1, settings->ColorDepth); - - freerdp_callback("OnGraphicsUpdate", "(IIIII)V", context->instance, - x1, y1, x2 - x1, y2 - y1); - return TRUE; -} - -static BOOL android_desktop_resize(rdpContext* context) -{ - DEBUG_ANDROID("ui_desktop_resize"); - - assert(context); - assert(context->settings); - assert(context->instance); - - freerdp_callback("OnGraphicsResize", "(IIII)V", - context->instance, context->settings->DesktopWidth, - context->settings->DesktopHeight, context->settings->ColorDepth); - return TRUE; -} - -static BOOL android_pre_connect(freerdp* instance) -{ - DEBUG_ANDROID("android_pre_connect"); - - rdpSettings* settings = instance->settings; - BOOL bitmap_cache = settings->BitmapCacheEnabled; - settings->OrderSupport[NEG_DSTBLT_INDEX] = TRUE; - settings->OrderSupport[NEG_PATBLT_INDEX] = TRUE; - settings->OrderSupport[NEG_SCRBLT_INDEX] = TRUE; - settings->OrderSupport[NEG_OPAQUE_RECT_INDEX] = TRUE; - settings->OrderSupport[NEG_DRAWNINEGRID_INDEX] = FALSE; - settings->OrderSupport[NEG_MULTIDSTBLT_INDEX] = FALSE; - settings->OrderSupport[NEG_MULTIPATBLT_INDEX] = FALSE; - settings->OrderSupport[NEG_MULTISCRBLT_INDEX] = FALSE; - settings->OrderSupport[NEG_MULTIOPAQUERECT_INDEX] = TRUE; - settings->OrderSupport[NEG_MULTI_DRAWNINEGRID_INDEX] = FALSE; - settings->OrderSupport[NEG_LINETO_INDEX] = TRUE; - settings->OrderSupport[NEG_POLYLINE_INDEX] = TRUE; - settings->OrderSupport[NEG_MEMBLT_INDEX] = bitmap_cache; - settings->OrderSupport[NEG_MEM3BLT_INDEX] = TRUE; - settings->OrderSupport[NEG_MEMBLT_V2_INDEX] = bitmap_cache; - settings->OrderSupport[NEG_MEM3BLT_V2_INDEX] = FALSE; - settings->OrderSupport[NEG_SAVEBITMAP_INDEX] = FALSE; - settings->OrderSupport[NEG_GLYPH_INDEX_INDEX] = TRUE; - settings->OrderSupport[NEG_FAST_INDEX_INDEX] = TRUE; - settings->OrderSupport[NEG_FAST_GLYPH_INDEX] = TRUE; - settings->OrderSupport[NEG_POLYGON_SC_INDEX] = FALSE; - settings->OrderSupport[NEG_POLYGON_CB_INDEX] = FALSE; - settings->OrderSupport[NEG_ELLIPSE_SC_INDEX] = FALSE; - settings->OrderSupport[NEG_ELLIPSE_CB_INDEX] = FALSE; - - settings->FrameAcknowledge = 10; - - PubSub_SubscribeChannelConnected(instance->context->pubSub, - (pChannelConnectedEventHandler) android_OnChannelConnectedEventHandler); - - PubSub_SubscribeChannelDisconnected(instance->context->pubSub, - (pChannelDisconnectedEventHandler) android_OnChannelDisconnectedEventHandler); - - freerdp_register_addin_provider(freerdp_channels_load_static_addin_entry, 0); - freerdp_client_load_addins(instance->context->channels, instance->settings); - - freerdp_channels_pre_connect(instance->context->channels, instance); - - return TRUE; -} - -static BOOL android_post_connect(freerdp* instance) -{ - UINT32 gdi_flags; - rdpSettings *settings = instance->settings; - - DEBUG_ANDROID("android_post_connect"); - - assert(instance); - assert(settings); - - freerdp_callback("OnSettingsChanged", "(IIII)V", instance, - settings->DesktopWidth, settings->DesktopHeight, - settings->ColorDepth); - - if (!(instance->context->cache = cache_new(settings))) - return FALSE; - - if (instance->settings->ColorDepth > 16) - gdi_flags = CLRBUF_32BPP | CLRCONV_ALPHA | CLRCONV_INVERT; - else - gdi_flags = CLRBUF_16BPP; - - if (!gdi_init(instance, gdi_flags, NULL)) - return FALSE; - - instance->update->BeginPaint = android_begin_paint; - instance->update->EndPaint = android_end_paint; - instance->update->DesktopResize = android_desktop_resize; - - if (freerdp_channels_post_connect(instance->context->channels, instance) < 0) - return FALSE; - - freerdp_callback("OnConnectionSuccess", "(I)V", instance); - - return TRUE; -} - -static void android_post_disconnect(freerdp* instance) -{ - DEBUG_ANDROID("android_post_disconnect"); - gdi_free(instance); - cache_free(instance->context->cache); -} - -static BOOL android_authenticate(freerdp* instance, char** username, char** password, char** domain) -{ - DEBUG_ANDROID("Authenticate user:"); - DEBUG_ANDROID(" Username: %s", *username); - DEBUG_ANDROID(" Domain: %s", *domain); - - JNIEnv* env; - jboolean attached = jni_attach_thread(&env); - jobject jstr1 = create_string_builder(env, *username); - jobject jstr2 = create_string_builder(env, *domain); - jobject jstr3 = create_string_builder(env, *password); - - jboolean res = freerdp_callback_bool_result("OnAuthenticate", "(ILjava/lang/StringBuilder;Ljava/lang/StringBuilder;Ljava/lang/StringBuilder;)Z", instance, jstr1, jstr2, jstr3); - - if (res == JNI_TRUE) - { - // read back string values - free(*username); - *username = get_string_from_string_builder(env, jstr1); - - free(*domain); - *domain = get_string_from_string_builder(env, jstr2); - - free(*password); - *password = get_string_from_string_builder(env, jstr3); - } - - if (attached == JNI_TRUE) - jni_detach_thread(); - - return ((res == JNI_TRUE) ? TRUE : FALSE); -} - -static BOOL android_verify_certificate(freerdp* instance, char* subject, char* issuer, char* fingerprint) -{ - DEBUG_ANDROID("Certificate details:"); - DEBUG_ANDROID("\tSubject: %s", subject); - DEBUG_ANDROID("\tIssuer: %s", issuer); - DEBUG_ANDROID("\tThumbprint: %s", fingerprint); - DEBUG_ANDROID("The above X.509 certificate could not be verified, possibly because you do not have " - "the CA certificate in your certificate store, or the certificate has expired." - "Please look at the documentation on how to create local certificate store for a private CA.\n"); - - JNIEnv* env; - jboolean attached = jni_attach_thread(&env); - jstring jstr1 = (*env)->NewStringUTF(env, subject); - jstring jstr2 = (*env)->NewStringUTF(env, issuer); - jstring jstr3 = (*env)->NewStringUTF(env, fingerprint); - - jboolean res = freerdp_callback_bool_result("OnVerifyCertificate", "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z", instance, jstr1, jstr2, jstr3); - - if (attached == JNI_TRUE) - jni_detach_thread(); - - return ((res == JNI_TRUE) ? TRUE : FALSE); -} - -static BOOL android_verify_changed_certificate(freerdp* instance, char* subject, char* issuer, - char* new_fingerprint, char* old_subject, char* old_issuer, char* old_fingerprint) -{ - return android_verify_certificate(instance, subject, issuer, new_fingerprint); -} - -static void* jni_input_thread(void* arg) -{ - HANDLE event[3]; - wMessageQueue* queue; - freerdp* instance = (freerdp*) arg; - androidContext *aCtx = (androidContext*)instance->context; - - assert(NULL != instance); - assert(NULL != aCtx); - - DEBUG_ANDROID("input_thread Start."); - - if (!(queue = freerdp_get_message_queue(instance, FREERDP_INPUT_MESSAGE_QUEUE))) - goto fail_get_message_queue; - - if (!(event[0] = CreateFileDescriptorEvent(NULL, FALSE, FALSE, - aCtx->event_queue->pipe_fd[0], WINPR_FD_READ))) - goto fail_create_event_0; - - if (!(event[1] = CreateFileDescriptorEvent(NULL, FALSE, FALSE, - aCtx->event_queue->pipe_fd[1], WINPR_FD_READ))) - goto fail_create_event_1; - - if (!(event[2] = freerdp_get_message_queue_event_handle(instance, FREERDP_INPUT_MESSAGE_QUEUE))) - goto fail_get_message_queue_event; - - do - { - DWORD rc = WaitForMultipleObjects(3, event, FALSE, INFINITE); - if ((rc < WAIT_OBJECT_0) || (rc > WAIT_OBJECT_0 + 2)) - continue; - - if (rc == WAIT_OBJECT_0 + 2) - { - wMessage msg; - - MessageQueue_Peek(queue, &msg, FALSE); - if (msg.id == WMQ_QUIT) - break; - } - if (android_check_fds(instance) != TRUE) - break; - } - while(1); - - DEBUG_ANDROID("input_thread Quit."); - -fail_get_message_queue_event: - CloseHandle(event[1]); -fail_create_event_1: - CloseHandle(event[0]); -fail_create_event_0: - MessageQueue_PostQuit(queue, 0); -fail_get_message_queue: - - ExitThread(0); - return NULL; -} - -static void* jni_channels_thread(void* arg) -{ - int status; - HANDLE event; - rdpChannels* channels; - freerdp* instance = (freerdp*) arg; - - assert(NULL != instance); - - DEBUG_ANDROID("Channels_thread Start."); - - channels = instance->context->channels; - event = freerdp_channels_get_event_handle(instance); - - while (WaitForSingleObject(event, INFINITE) == WAIT_OBJECT_0) - { - status = freerdp_channels_process_pending_messages(instance); - - if (!status) - break; - } - - DEBUG_ANDROID("channels_thread Quit."); - - ExitThread(0); - return NULL; -} - -static int android_freerdp_run(freerdp* instance) -{ - int i; - int fds; - int max_fds; - int rcount; - int wcount; - int fd_input_event; - HANDLE input_event = NULL; - void* rfds[32]; - void* wfds[32]; - fd_set rfds_set; - fd_set wfds_set; - int select_status; - struct timeval timeout; - - const rdpSettings* settings = instance->context->settings; - - HANDLE input_thread = NULL; - HANDLE channels_thread = NULL; - - BOOL async_input = settings->AsyncInput; - BOOL async_channels = settings->AsyncChannels; - BOOL async_transport = settings->AsyncTransport; - - DEBUG_ANDROID("AsyncUpdate=%d", settings->AsyncUpdate); - DEBUG_ANDROID("AsyncInput=%d", settings->AsyncInput); - DEBUG_ANDROID("AsyncChannels=%d", settings->AsyncChannels); - DEBUG_ANDROID("AsyncTransport=%d", settings->AsyncTransport); - - memset(rfds, 0, sizeof(rfds)); - memset(wfds, 0, sizeof(wfds)); - - if (!freerdp_connect(instance)) - { - freerdp_callback("OnConnectionFailure", "(I)V", instance); - return 0; - } - - if (async_input) - { - if (!(input_thread = CreateThread(NULL, 0, - (LPTHREAD_START_ROUTINE) jni_input_thread, instance, 0, NULL))) - { - DEBUG_ANDROID("Failed to create async input thread\n"); - goto disconnect; - } - } - - if (async_channels) - { - if (!(channels_thread = CreateThread(NULL, 0, - (LPTHREAD_START_ROUTINE) jni_channels_thread, instance, 0, NULL))) - { - DEBUG_ANDROID("Failed to create async channels thread\n"); - goto disconnect; - } - } - - ((androidContext*)instance->context)->is_connected = TRUE; - while (!freerdp_shall_disconnect(instance)) - { - rcount = 0; - wcount = 0; - - if (!async_transport) - { - if (freerdp_get_fds(instance, rfds, &rcount, wfds, &wcount) != TRUE) - { - DEBUG_ANDROID("Failed to get FreeRDP file descriptor\n"); - break; - } - } - - if (!async_channels) - { - if (freerdp_channels_get_fds(instance->context->channels, instance, rfds, &rcount, wfds, &wcount) != TRUE) - { - DEBUG_ANDROID("Failed to get channel manager file descriptor\n"); - break; - } - } - - if (!async_input) - { - if (android_get_fds(instance, rfds, &rcount, wfds, &wcount) != TRUE) - { - DEBUG_ANDROID("Failed to get android file descriptor\n"); - break; - } - } - else - { - input_event = freerdp_get_message_queue_event_handle(instance, FREERDP_INPUT_MESSAGE_QUEUE); - fd_input_event = GetEventFileDescriptor(input_event); - rfds[rcount++] = (void*) (long) fd_input_event; - } - - max_fds = 0; - FD_ZERO(&rfds_set); - FD_ZERO(&wfds_set); - - for (i = 0; i < rcount; i++) - { - fds = (int)(long)(rfds[i]); - - if (fds > max_fds) - max_fds = fds; - - FD_SET(fds, &rfds_set); - } - - if (max_fds == 0) - break; - - timeout.tv_sec = 1; - timeout.tv_usec = 0; - - select_status = select(max_fds + 1, &rfds_set, NULL, NULL, &timeout); - - if (select_status == 0) - continue; - else if (select_status == -1) - { - /* these are not really errors */ - if (!((errno == EAGAIN) || - (errno == EWOULDBLOCK) || - (errno == EINPROGRESS) || - (errno == EINTR))) /* signal occurred */ - { - DEBUG_ANDROID("android_run: select failed\n"); - break; - } - } - - if (freerdp_shall_disconnect(instance)) - break; - - if (!async_transport) - { - if (freerdp_check_fds(instance) != TRUE) - { - DEBUG_ANDROID("Failed to check FreeRDP file descriptor\n"); - break; - } - } - - if (!async_input) - { - if (android_check_fds(instance) != TRUE) - { - DEBUG_ANDROID("Failed to check android file descriptor\n"); - break; - } - } - else if (input_event) - { - if (WaitForSingleObject(input_event, 0) == WAIT_OBJECT_0) - { - if (!freerdp_message_queue_process_pending_messages(instance, - FREERDP_INPUT_MESSAGE_QUEUE)) - { - DEBUG_ANDROID("User Disconnect"); - break; - } - } - } - - if (!async_channels) - { - if (freerdp_channels_check_fds(instance->context->channels, instance) != TRUE) - { - DEBUG_ANDROID("Failed to check channel manager file descriptor\n"); - break; - } - } - } - -disconnect: - DEBUG_ANDROID("Prepare shutdown..."); - - // issue another OnDisconnecting here in case the disconnect was initiated by the server and not our client - freerdp_callback("OnDisconnecting", "(I)V", instance); - - DEBUG_ANDROID("Close channels..."); - freerdp_channels_disconnect(instance->context->channels, instance); - - DEBUG_ANDROID("Cleanup threads..."); - - if (async_channels && channels_thread) - { - WaitForSingleObject(channels_thread, INFINITE); - CloseHandle(channels_thread); - } - - if (async_input && input_thread) - { - wMessageQueue* input_queue = freerdp_get_message_queue(instance, FREERDP_INPUT_MESSAGE_QUEUE); - if (input_queue) - { - if (MessageQueue_PostQuit(input_queue, 0)) - WaitForSingleObject(input_thread, INFINITE); - } - CloseHandle(input_thread); - } - - DEBUG_ANDROID("run Disconnecting..."); - freerdp_disconnect(instance); - freerdp_callback("OnDisconnected", "(I)V", instance); - - DEBUG_ANDROID("run Quit."); - - return 0; -} - -static void* android_thread_func(void* param) -{ - freerdp* instance = param; - - DEBUG_ANDROID("android_thread_func Start."); - - assert(instance); - - android_freerdp_run(instance); - - DEBUG_ANDROID("android_thread_func Quit."); - - ExitThread(0); - return NULL; -} - -JNIEXPORT jint JNICALL jni_freerdp_new(JNIEnv *env, jclass cls) -{ - freerdp* instance; - -#if defined(WITH_GPROF) - setenv("CPUPROFILE_FREQUENCY", "200", 1); - monstartup("libfreerdp-android.so"); -#endif - - // create instance - if (!(instance = freerdp_new())) - return (jint)NULL; - instance->PreConnect = android_pre_connect; - instance->PostConnect = android_post_connect; - instance->PostDisconnect = android_post_disconnect; - instance->Authenticate = android_authenticate; - instance->VerifyCertificate = android_verify_certificate; - instance->VerifyChangedCertificate = android_verify_changed_certificate; - - // create context - instance->ContextSize = sizeof(androidContext); - instance->ContextNew = android_context_new; - instance->ContextFree = android_context_free; - - if (!freerdp_context_new(instance)) - { - freerdp_free(instance); - instance = NULL; - } - - return (jint) instance; -} - -JNIEXPORT void JNICALL jni_freerdp_free(JNIEnv *env, jclass cls, jint instance) -{ - freerdp* inst = (freerdp*)instance; - - freerdp_context_free(inst); - freerdp_free(inst); - -#if defined(WITH_GPROF) - moncleanup(); -#endif -} - -JNIEXPORT jboolean JNICALL jni_freerdp_connect(JNIEnv *env, jclass cls, jint instance) -{ - freerdp* inst = (freerdp*)instance; - androidContext* ctx = (androidContext*)inst->context; - - assert(inst); - assert(ctx); - - if (!(ctx->thread = CreateThread(NULL, 0, - (LPTHREAD_START_ROUTINE)android_thread_func, inst, 0, NULL))) - { - return JNI_FALSE; - } - - return JNI_TRUE; -} - -JNIEXPORT jboolean JNICALL jni_freerdp_disconnect(JNIEnv *env, jclass cls, jint instance) -{ - freerdp* inst = (freerdp*)instance; - androidContext* ctx = (androidContext*)inst->context; - ANDROID_EVENT* event = (ANDROID_EVENT*)android_event_disconnect_new(); - if (!event) - return JNI_FALSE; - - DEBUG_ANDROID("DISCONNECT!"); - - assert(inst); - assert(ctx); - assert(event); - - if (!android_push_event(inst, event)) - { - android_event_disconnect_free(event); - return JNI_FALSE; - } - - WaitForSingleObject(ctx->thread, INFINITE); - CloseHandle(ctx->thread); - ctx->thread = NULL; - - freerdp_callback("OnDisconnecting", "(I)V", instance); - - return (jboolean) JNI_TRUE; -} - -JNIEXPORT jboolean JNICALL jni_freerdp_cancel_connection(JNIEnv *env, jclass cls, jint instance) -{ - return jni_freerdp_disconnect(env, cls, instance); -} - -JNIEXPORT jboolean JNICALL jni_freerdp_set_data_directory(JNIEnv *env, jclass cls, jint instance, jstring jdirectory) -{ - freerdp* inst = (freerdp*)instance; - rdpSettings * settings = inst->settings; - - const jbyte* directory = (*env)->GetStringUTFChars(env, jdirectory, NULL); - if (!directory) - return JNI_FALSE; - - free(settings->HomePath); - free(settings->ConfigPath); - settings->HomePath = settings->ConfigPath = NULL; - - int config_dir_len = strlen(directory) + 10; /* +9 chars for /.freerdp and +1 for \0 */ - char* config_dir_buf = (char*)malloc(config_dir_len); - if (!config_dir_buf) - goto out_malloc_fail; - - strcpy(config_dir_buf, directory); - strcat(config_dir_buf, "/.freerdp"); - settings->HomePath = strdup(directory); - if (!settings->HomePath) - goto out_strdup_fail; - settings->ConfigPath = config_dir_buf; /* will be freed by freerdp library */ - - (*env)->ReleaseStringUTFChars(env, jdirectory, directory); - return JNI_TRUE; - -out_strdup_fail: - free(config_dir_buf); -out_malloc_fail: - (*env)->ReleaseStringUTFChars(env, jdirectory, directory); - return JNI_FALSE; - -} - -JNIEXPORT jboolean JNICALL jni_freerdp_set_connection_info(JNIEnv *env, jclass cls, jint instance, - jstring jhostname, jstring jusername, jstring jpassword, jstring jdomain, jint width, jint height, - jint color_depth, jint port, jboolean console, jint security, jstring jcertname) -{ - freerdp* inst = (freerdp*)instance; - rdpSettings * settings = inst->settings; - - const jbyte *hostname; - const jbyte *username; - const jbyte *password; - const jbyte *domain; - const jbyte *certname; - - if(!(hostname = (*env)->GetStringUTFChars(env, jhostname, NULL))) - return JNI_FALSE; - if (!(username = (*env)->GetStringUTFChars(env, jusername, NULL))) - goto out_fail_username; - if (!(password = (*env)->GetStringUTFChars(env, jpassword, NULL))) - goto out_fail_password; - if (!(domain = (*env)->GetStringUTFChars(env, jdomain, NULL))) - goto out_fail_domain; - if (!(certname = (*env)->GetStringUTFChars(env, jcertname, NULL))) - goto out_fail_certname; - - - DEBUG_ANDROID("hostname: %s", (char*) hostname); - DEBUG_ANDROID("username: %s", (char*) username); - DEBUG_ANDROID("password: %s", (char*) password); - DEBUG_ANDROID("domain: %s", (char*) domain); - DEBUG_ANDROID("width: %d", width); - DEBUG_ANDROID("height: %d", height); - DEBUG_ANDROID("color depth: %d", color_depth); - DEBUG_ANDROID("port: %d", port); - DEBUG_ANDROID("security: %d", security); - - settings->DesktopWidth = width; - settings->DesktopHeight = height; - settings->ColorDepth = color_depth; - settings->ServerPort = port; - - // Hack for 16 bit RDVH connections: - // In this case we get screen corruptions when we have an odd screen resolution width ... need to investigate what is causing this... - if (color_depth <= 16) - settings->DesktopWidth &= (~1); - - if (!(settings->ServerHostname = strdup(hostname))) - goto out_fail_strdup; - - if (username && strlen(username) > 0) - { - if (!(settings->Username = strdup(username))) - goto out_fail_strdup; - } - - if (password && strlen(password) > 0) - { - if (!(settings->Password = strdup(password))) - goto out_fail_strdup; - settings->AutoLogonEnabled = TRUE; - } - - if (!(settings->Domain = strdup(domain))) - goto out_fail_strdup; - - if (certname && strlen(certname) > 0) - { - if (!(settings->CertificateName = strdup(certname))) - goto out_fail_strdup; - } - - settings->ConsoleSession = (console == JNI_TRUE) ? TRUE : FALSE; - - settings->SoftwareGdi = TRUE; - settings->BitmapCacheV3Enabled = TRUE; - - switch ((int) security) - { - case 1: - /* Standard RDP */ - settings->RdpSecurity = TRUE; - settings->TlsSecurity = FALSE; - settings->NlaSecurity = FALSE; - settings->ExtSecurity = FALSE; - settings->UseRdpSecurityLayer = TRUE; - break; - - case 2: - /* TLS */ - settings->NlaSecurity = FALSE; - settings->TlsSecurity = TRUE; - settings->RdpSecurity = FALSE; - settings->ExtSecurity = FALSE; - break; - - case 3: - /* NLA */ - settings->NlaSecurity = TRUE; - settings->TlsSecurity = FALSE; - settings->RdpSecurity = FALSE; - settings->ExtSecurity = FALSE; - break; - - default: - break; - } - - // set US keyboard layout - settings->KeyboardLayout = 0x0409; - - (*env)->ReleaseStringUTFChars(env, jhostname, hostname); - (*env)->ReleaseStringUTFChars(env, jusername, username); - (*env)->ReleaseStringUTFChars(env, jpassword, password); - (*env)->ReleaseStringUTFChars(env, jdomain, domain); - (*env)->ReleaseStringUTFChars(env, jcertname, certname); - - return JNI_TRUE; - - -out_fail_strdup: - (*env)->ReleaseStringUTFChars(env, jcertname, certname); -out_fail_certname: - (*env)->ReleaseStringUTFChars(env, jdomain, domain); -out_fail_domain: - (*env)->ReleaseStringUTFChars(env, jpassword, password); -out_fail_password: - (*env)->ReleaseStringUTFChars(env, jusername, username); -out_fail_username: - (*env)->ReleaseStringUTFChars(env, jhostname, hostname); - return JNI_FALSE; -} - -JNIEXPORT void JNICALL jni_freerdp_set_performance_flags( - JNIEnv *env, jclass cls, jint instance, jboolean remotefx, - jboolean disableWallpaper, jboolean disableFullWindowDrag, - jboolean disableMenuAnimations, jboolean disableTheming, - jboolean enableFontSmoothing, jboolean enableDesktopComposition) -{ - freerdp* inst = (freerdp*)instance; - rdpSettings * settings = inst->settings; - - DEBUG_ANDROID("remotefx: %d", (remotefx == JNI_TRUE) ? 1 : 0); - if (remotefx == JNI_TRUE) - { - settings->RemoteFxCodec = TRUE; - settings->FastPathOutput = TRUE; - settings->ColorDepth = 32; - settings->LargePointerFlag = TRUE; - settings->FrameMarkerCommandEnabled = TRUE; - } - else - { - /* enable NSCodec if we don't use remotefx */ - settings->NSCodec = TRUE; - } - - /* store performance settings */ - settings->DisableWallpaper = (disableWallpaper == JNI_TRUE) ? TRUE : FALSE; - settings->DisableFullWindowDrag = (disableFullWindowDrag == JNI_TRUE) ? TRUE : FALSE; - settings->DisableMenuAnims = (disableMenuAnimations == JNI_TRUE) ? TRUE : FALSE; - settings->DisableThemes = (disableTheming == JNI_TRUE) ? TRUE : FALSE; - settings->AllowFontSmoothing = (enableFontSmoothing == JNI_TRUE) ? TRUE : FALSE; - settings->AllowDesktopComposition = (enableDesktopComposition == JNI_TRUE) ? TRUE : FALSE; - - /* Create performance flags from settings */ - freerdp_performance_flags_make(settings); - - DEBUG_ANDROID("performance_flags: %04X", settings->PerformanceFlags); -} - -JNIEXPORT jboolean JNICALL jni_freerdp_set_advanced_settings(JNIEnv *env, jclass cls, - jint instance, jstring jRemoteProgram, jstring jWorkDir, - jboolean async_channel, jboolean async_transport, jboolean async_input, - jboolean async_update) -{ - freerdp* inst = (freerdp*)instance; - rdpSettings * settings = inst->settings; - jboolean ret = JNI_FALSE; - - const jbyte *remote_program; - const jbyte *work_dir; - - if (!(remote_program = (*env)->GetStringUTFChars(env, jRemoteProgram, NULL))) - return JNI_FALSE; - - if (!(work_dir = (*env)->GetStringUTFChars(env, jWorkDir, NULL))) - goto out_fail_work_dir; - - DEBUG_ANDROID("Remote Program: %s", (char*) remote_program); - DEBUG_ANDROID("Work Dir: %s", (char*) work_dir); - - /* Enable async mode. */ - settings->AsyncUpdate = async_update; - settings->AsyncChannels = async_channel; - settings->AsyncTransport = async_transport; - settings->AsyncInput = async_input; - - if (remote_program && strlen(remote_program) > 0) - { - if (!(settings->AlternateShell = strdup(remote_program))) - goto out_fail_strdup; - } - - if (work_dir && strlen(work_dir) > 0) - { - if (!(settings->ShellWorkingDirectory = strdup(work_dir))) - goto out_fail_strdup; - } - - ret = JNI_TRUE; - -out_fail_strdup: - (*env)->ReleaseStringUTFChars(env, jWorkDir, work_dir); -out_fail_work_dir: - (*env)->ReleaseStringUTFChars(env, jRemoteProgram, remote_program); - return ret; -} - -JNIEXPORT jboolean JNICALL jni_freerdp_set_drive_redirection(JNIEnv *env, jclass cls, jint instance, jstring jpath) -{ - freerdp* inst = (freerdp*)instance; - rdpSettings * settings = inst->settings; - char* args[] = {"drive", "Android", ""}; - jboolean ret = JNI_FALSE; - - const jbyte *path = (*env)->GetStringUTFChars(env, jpath, NULL); - if (!path) - return JNI_FALSE; - DEBUG_ANDROID("drive redirect: %s", (char*)path); - - args[2] = (char*)path; - if (freerdp_client_add_device_channel(settings, 3, args) == -1) - { - settings->DeviceRedirection = FALSE; - goto out_fail; - } - - settings->DeviceRedirection = TRUE; - - ret = JNI_TRUE; -out_fail: - (*env)->ReleaseStringUTFChars(env, jpath, path); - return ret; -} - -JNIEXPORT jboolean JNICALL jni_freerdp_set_sound_redirection(JNIEnv *env, - jclass cls, jint instance, jint redirect) -{ - freerdp* inst = (freerdp*)instance; - rdpSettings * settings = inst->settings; - - DEBUG_ANDROID("sound: %s", - redirect ? ((redirect == 1) ? "Server" : "Redirect") : "None"); - - settings->AudioPlayback = (redirect == 2) ? TRUE : FALSE; - if (settings->AudioPlayback) - { - int ret; - char* p[1] = {"rdpsnd"}; - int count = 1; - - ret = freerdp_client_add_static_channel(settings, count, p); - - if(ret == -1) - return JNI_FALSE; - } - settings->RemoteConsoleAudio = (redirect == 1) ? TRUE : FALSE; - return JNI_TRUE; -} - -JNIEXPORT jboolean JNICALL jni_freerdp_set_microphone_redirection(JNIEnv *env, - jclass cls, jint instance, jboolean enable) -{ - freerdp* inst = (freerdp*)instance; - rdpSettings * settings = inst->settings; - - DEBUG_ANDROID("microphone redirect: %s", enable ? "TRUE" : "FALSE"); - - settings->AudioCapture = enable; - if (enable) - { - int ret; - char* p[1] = {"audin"}; - int count = 1; - - ret = freerdp_client_add_dynamic_channel(settings, count, p); - - if (ret == -1) - return JNI_FALSE; - - } - return JNI_TRUE; -} - -JNIEXPORT void JNICALL jni_freerdp_set_clipboard_redirection(JNIEnv *env, jclass cls, jint instance, jboolean enable) -{ - freerdp* inst = (freerdp*)instance; - rdpSettings * settings = inst->settings; - - DEBUG_ANDROID("clipboard redirect: %s", enable ? "TRUE" : "FALSE"); - - settings->RedirectClipboard = enable ? TRUE : FALSE; -} - -JNIEXPORT jboolean JNICALL jni_freerdp_set_gateway_info(JNIEnv *env, jclass cls, jint instance, jstring jgatewayhostname, jint port, - jstring jgatewayusername, jstring jgatewaypassword, jstring jgatewaydomain) -{ - freerdp* inst = (freerdp*)instance; - rdpSettings * settings = inst->settings; - jboolean ret = JNI_FALSE; - - const jbyte *gatewayhostname; - const jbyte *gatewayusername; - const jbyte *gatewaypassword; - const jbyte *gatewaydomain; - - if (!(gatewayhostname = (*env)->GetStringUTFChars(env, jgatewayhostname, NULL))) - return JNI_FALSE; - if (!(gatewayusername = (*env)->GetStringUTFChars(env, jgatewayusername, NULL))) - goto out_fail_username; - if (!(gatewaypassword = (*env)->GetStringUTFChars(env, jgatewaypassword, NULL))) - goto out_fail_password; - if (!(gatewaydomain = (*env)->GetStringUTFChars(env, jgatewaydomain, NULL))) - goto out_fail_domain; - - DEBUG_ANDROID("gatewayhostname: %s", (char*) gatewayhostname); - DEBUG_ANDROID("gatewayport: %d", port); - DEBUG_ANDROID("gatewayusername: %s", (char*) gatewayusername); - DEBUG_ANDROID("gatewaypassword: %s", (char*) gatewaypassword); - DEBUG_ANDROID("gatewaydomain: %s", (char*) gatewaydomain); - - settings->GatewayPort = port; - settings->GatewayUsageMethod = TSC_PROXY_MODE_DIRECT; - settings->GatewayEnabled = TRUE; - settings->GatewayUseSameCredentials = FALSE; - settings->GatewayHostname = strdup(gatewayhostname); - settings->GatewayUsername = strdup(gatewayusername); - settings->GatewayPassword = strdup(gatewaypassword); - settings->GatewayDomain = strdup(gatewaydomain); - if (!settings->GatewayHostname || !settings->GatewayUsername || - !settings->GatewayPassword || !settings->GatewayDomain) - { - goto out_fail_strdup; - } - - - ret = JNI_TRUE; - -out_fail_strdup: - (*env)->ReleaseStringUTFChars(env, jgatewaydomain, gatewaydomain); -out_fail_domain: - (*env)->ReleaseStringUTFChars(env, jgatewaypassword, gatewaypassword); -out_fail_password: - (*env)->ReleaseStringUTFChars(env, jgatewayusername, gatewayusername); -out_fail_username: - (*env)->ReleaseStringUTFChars(env, jgatewayhostname, gatewayhostname); - - return ret; -} - -static void copy_pixel_buffer(UINT8* dstBuf, UINT8* srcBuf, int x, int y, int width, int height, int wBuf, int hBuf, int bpp) -{ - int i; - int length; - int scanline; - UINT8 *dstp, *srcp; - - length = width * bpp; - scanline = wBuf * bpp; - - srcp = (UINT8*) &srcBuf[(scanline * y) + (x * bpp)]; - dstp = (UINT8*) &dstBuf[(scanline * y) + (x * bpp)]; - - for (i = 0; i < height; i++) - { - memcpy(dstp, srcp, length); - srcp += scanline; - dstp += scanline; - } -} - -JNIEXPORT jboolean JNICALL jni_freerdp_update_graphics( - JNIEnv *env, jclass cls, jint instance, jobject bitmap, jint x, jint y, jint width, jint height) -{ - - int ret; - void* pixels; - AndroidBitmapInfo info; - freerdp* inst = (freerdp*)instance; - rdpGdi *gdi = inst->context->gdi; - - if ((ret = AndroidBitmap_getInfo(env, bitmap, &info)) < 0) - { - DEBUG_ANDROID("AndroidBitmap_getInfo() failed ! error=%d", ret); - return JNI_FALSE; - } - - if ((ret = AndroidBitmap_lockPixels(env, bitmap, &pixels)) < 0) - { - DEBUG_ANDROID("AndroidBitmap_lockPixels() failed ! error=%d", ret); - return JNI_FALSE; - } - - copy_pixel_buffer(pixels, gdi->primary_buffer, x, y, width, height, gdi->width, gdi->height, gdi->bytesPerPixel); - - AndroidBitmap_unlockPixels(env, bitmap); - - return JNI_TRUE; -} - -JNIEXPORT jboolean JNICALL jni_freerdp_send_key_event( - JNIEnv *env, jclass cls, jint instance, jint keycode, jboolean down) -{ - DWORD scancode; - ANDROID_EVENT* event; - - freerdp* inst = (freerdp*)instance; - - scancode = GetVirtualScanCodeFromVirtualKeyCode(keycode, 4); - int flags = (down == JNI_TRUE) ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE; - flags |= (scancode & KBDEXT) ? KBD_FLAGS_EXTENDED : 0; - event = (ANDROID_EVENT*) android_event_key_new(flags, scancode & 0xFF); - if (!event) - return JNI_FALSE; - - if (!android_push_event(inst, event)) - { - android_event_key_free((ANDROID_EVENT_KEY *)event); - return JNI_FALSE; - } - - DEBUG_ANDROID("send_key_event: %d, %d", (int)scancode, flags); - return JNI_TRUE; -} - -JNIEXPORT jboolean JNICALL jni_freerdp_send_unicodekey_event( - JNIEnv *env, jclass cls, jint instance, jint keycode) -{ - ANDROID_EVENT* event; - - freerdp* inst = (freerdp*)instance; - event = (ANDROID_EVENT*) android_event_unicodekey_new(keycode); - if (!event) - return JNI_FALSE; - if (!android_push_event(inst, event)) - { - android_event_unicodekey_free((ANDROID_EVENT_KEY *)event); - return JNI_FALSE; - } - - DEBUG_ANDROID("send_unicodekey_event: %d", keycode); - return JNI_TRUE; -} - -JNIEXPORT jboolean JNICALL jni_freerdp_send_cursor_event( - JNIEnv *env, jclass cls, jint instance, jint x, jint y, jint flags) -{ - ANDROID_EVENT* event; - - freerdp* inst = (freerdp*)instance; - event = (ANDROID_EVENT*) android_event_cursor_new(flags, x, y); - if (!event) - return JNI_FALSE; - - if (!android_push_event(inst, event)) - { - android_event_cursor_free((ANDROID_EVENT_CURSOR *)event); - return JNI_FALSE; - } - - DEBUG_ANDROID("send_cursor_event: (%d, %d), %d", x, y, flags); - return JNI_TRUE; -} - -JNIEXPORT jboolean JNICALL jni_freerdp_send_clipboard_data(JNIEnv *env, jclass cls, jint instance, jstring jdata) -{ - ANDROID_EVENT* event; - freerdp* inst = (freerdp*)instance; - const jbyte *data = jdata != NULL ? (*env)->GetStringUTFChars(env, jdata, NULL) : NULL; - int data_length = data ? strlen(data) : 0; - jboolean ret = JNI_FALSE;; - - event = (ANDROID_EVENT*) android_event_clipboard_new((void*)data, data_length); - if (!event) - goto out_fail; - - if (!android_push_event(inst, event)) - { - android_event_clipboard_free((ANDROID_EVENT_CLIPBOARD *)event); - goto out_fail; - } - - DEBUG_ANDROID("send_clipboard_data: (%s)", data); - - ret = JNI_TRUE; -out_fail: - if (data) - (*env)->ReleaseStringUTFChars(env, jdata, data); - return ret; -} - -JNIEXPORT jstring JNICALL jni_freerdp_get_version(JNIEnv *env, jclass cls) -{ - return (*env)->NewStringUTF(env, GIT_REVISION); -} diff --git a/client/Android/FreeRDPCore/jni/android_freerdp.h b/client/Android/FreeRDPCore/jni/android_freerdp.h deleted file mode 100644 index d6f5f4dfe..000000000 --- a/client/Android/FreeRDPCore/jni/android_freerdp.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - Android JNI Client Layer - - Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz - - This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. - If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. -*/ - -#ifndef __ANDROID_FREERDP_H -#define __ANDROID_FREERDP_H - -#include - -#include -#include - -#include -#include - -#include "android_event.h" - -struct android_context -{ - rdpContext rdpCtx; - - ANDROID_EVENT_QUEUE* event_queue; - HANDLE thread; - - BOOL is_connected; - - BOOL clipboardSync; - wClipboard* clipboard; - UINT32 numServerFormats; - UINT32 requestedFormatId; - HANDLE clipboardRequestEvent; - CLIPRDR_FORMAT* serverFormats; - CliprdrClientContext* cliprdr; - UINT32 clipboardCapabilities; -}; -typedef struct android_context androidContext; - -JNIEXPORT jint JNICALL jni_freerdp_new(JNIEnv *env, jclass cls); -JNIEXPORT void JNICALL jni_freerdp_free(JNIEnv *env, jclass cls, jint instance); -JNIEXPORT jboolean JNICALL jni_freerdp_connect(JNIEnv *env, jclass cls, jint instance); -JNIEXPORT jboolean JNICALL jni_freerdp_disconnect(JNIEnv *env, jclass cls, jint instance); -JNIEXPORT jboolean JNICALL jni_freerdp_cancel_connection(JNIEnv *env, jclass cls, jint instance); -JNIEXPORT jboolean JNICALL jni_freerdp_set_connection_info(JNIEnv *env, jclass cls, jint instance, - jstring jhostname, jstring jusername, jstring jpassword, jstring jdomain, jint width, - jint height, jint color_depth, jint port, jboolean console, jint security, jstring jcertname); -JNIEXPORT void JNICALL jni_freerdp_set_performance_flags(JNIEnv *env, jclass cls, jint instance, jboolean remotefx, jboolean disableWallpaper, jboolean disableFullWindowDrag, - jboolean disableMenuAnimations, jboolean disableTheming, jboolean enableFontSmoothing, jboolean enableDesktopComposition); -JNIEXPORT jboolean JNICALL jni_freerdp_set_advanced_settings(JNIEnv *env, jclass cls, - jint instance, jstring jRemoteProgram, jstring jWorkDir, - jboolean async_channel, jboolean async_transport, jboolean async_input, - jboolean async_update); -JNIEXPORT jboolean JNICALL jni_freerdp_set_drive_redirection(JNIEnv *env, jclass cls, jint instance, jstring jpath); -JNIEXPORT jboolean JNICALL jni_freerdp_set_sound_redirection(JNIEnv *env, jclass cls, jint instance, jint redirect); -JNIEXPORT jboolean JNICALL jni_freerdp_set_microphone_redirection(JNIEnv *env, jclass cls, jint instance, jboolean enable); -JNIEXPORT void JNICALL jni_freerdp_set_clipboard_redirection(JNIEnv *env, jclass cls, jint instance, jboolean enable); -JNIEXPORT jboolean JNICALL jni_freerdp_set_gateway_info(JNIEnv *env, jclass cls, jint instance, jstring jgatewayhostname, jint port, jstring jgatewayusername, jstring jgatewaypassword, jstring jgatewaydomain); -JNIEXPORT jboolean JNICALL jni_freerdp_set_data_directory(JNIEnv *env, jclass cls, jint instance, jstring jdirectory); -JNIEXPORT jboolean JNICALL jni_freerdp_update_graphics(JNIEnv *env, jclass cls, jint instance, jobject bitmap, jint x, jint y, jint width, jint height); -JNIEXPORT jboolean JNICALL jni_freerdp_send_cursor_event(JNIEnv *env, jclass cls, jint instance, jint x, jint y, jint flags); -JNIEXPORT jboolean JNICALL jni_freerdp_send_key_event(JNIEnv *env, jclass cls, jint instance, jint keycode, jboolean down); -JNIEXPORT jboolean JNICALL jni_freerdp_send_unicodekey_event(JNIEnv *env, jclass cls, jint instance, jint keycode); -JNIEXPORT jboolean JNICALL jni_freerdp_send_clipboard_data(JNIEnv *env, jclass cls, jint instance, jstring jdata); -JNIEXPORT jstring JNICALL jni_freerdp_get_version(JNIEnv *env, jclass cls); - -#endif /* __ANDROID_FREERDP_H */ - diff --git a/client/Android/FreeRDPCore/jni/generated/android_freerdp_jni.c b/client/Android/FreeRDPCore/jni/generated/android_freerdp_jni.c deleted file mode 100644 index 77b9137fb..000000000 --- a/client/Android/FreeRDPCore/jni/generated/android_freerdp_jni.c +++ /dev/null @@ -1,142 +0,0 @@ -/* - FreeRDP: A Remote Desktop Protocol client. - Android JNI Bindings and Native Code - - Copyright 2010 Marc-Andre Moreau - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -#include "android_freerdp.h" -#include "android_freerdp_jni.h" - -JNIEXPORT jint JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1new(JNIEnv *env, jclass cls) -{ - return jni_freerdp_new(env, cls); -} - -JNIEXPORT void JNICALL JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1free(JNIEnv *env, jclass cls, jint instance) -{ - jni_freerdp_free(env, cls, instance); -} - -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1connect(JNIEnv *env, jclass cls, jint instance) -{ - return jni_freerdp_connect(env, cls, instance); -} - -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1disconnect(JNIEnv *env, jclass cls, jint instance) -{ - return jni_freerdp_disconnect(env, cls, instance); -} - -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1cancel_1connection(JNIEnv *env, jclass cls, jint instance) -{ - return jni_freerdp_cancel_connection(env, cls, instance); -} - -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1connection_1info(JNIEnv *env, jclass cls, jint instance, - jstring jhostname, jstring jusername, jstring jpassword, jstring jdomain, jint width, jint height, jint color_depth, jint port, - jboolean console, jint security, jstring certname) -{ - return jni_freerdp_set_connection_info(env, cls, instance, jhostname, jusername, jpassword, jdomain, - width, height, color_depth, port, console, security, certname); -} - -JNIEXPORT jboolean JNICALL -Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1advanced_1settings( - JNIEnv *env, jclass cls, jint instance, jstring remote_program, jstring work_dir, - jboolean async_channel, jboolean async_transport, jboolean async_input, - jboolean async_update) -{ - return jni_freerdp_set_advanced_settings(env, cls, instance, remote_program, work_dir, - async_channel, async_transport, async_input, async_update); -} - -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1data_1directory(JNIEnv *env, jclass cls, jint instance, jstring directory) -{ - return jni_freerdp_set_data_directory(env, cls, instance, directory); -} - -JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1performance_1flags( - JNIEnv *env, jclass cls, jint instance, jboolean remotefx, jboolean disableWallpaper, jboolean disableFullWindowDrag, - jboolean disableMenuAnimations, jboolean disableTheming, jboolean enableFontSmoothing, jboolean enableDesktopComposition) -{ - jni_freerdp_set_performance_flags(env, cls, instance, remotefx, disableWallpaper, disableFullWindowDrag, disableMenuAnimations, disableTheming, enableFontSmoothing, enableDesktopComposition); -} - -JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1clipboard_1redirection - (JNIEnv *env, jclass cls, jint inst, jboolean enable) -{ - jni_freerdp_set_clipboard_redirection(env, cls, inst, enable); -} - -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1sound_1redirection - (JNIEnv *env, jclass cls, jint inst, jint redirect) -{ - return jni_freerdp_set_sound_redirection(env, cls, inst, redirect); -} - -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1microphone_1redirection - (JNIEnv *env, jclass cls, jint inst, jboolean redirect) -{ - return jni_freerdp_set_microphone_redirection(env, cls, inst, redirect); -} - -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1drive_1redirection - (JNIEnv *env, jclass cls, jint inst, jstring path) -{ - return jni_freerdp_set_drive_redirection(env, cls, inst, path); -} - -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1gateway_1info - (JNIEnv *env, jclass cls, jint inst, jstring hostname, jint port, jstring username, jstring password, jstring domain) -{ - return jni_freerdp_set_gateway_info(env, cls, inst, hostname, port, username, password, domain); -} - -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1update_1graphics( - JNIEnv *env, jclass cls, jint instance, jobject bitmap, jint x, jint y, jint width, jint height) -{ - return jni_freerdp_update_graphics(env, cls, instance, bitmap, x, y, width, height); -} - -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1send_1cursor_1event( - JNIEnv *env, jclass cls, jint instance, jint x, jint y, jint flags) -{ - return jni_freerdp_send_cursor_event(env, cls, instance, x, y, flags); -} - -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1send_1key_1event( - JNIEnv *env, jclass cls, jint instance, jint keycode, jboolean down) -{ - return jni_freerdp_send_key_event(env, cls, instance, keycode, down); -} - -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1send_1unicodekey_1event - (JNIEnv *env, jclass cls, jint instance, jint keycode) -{ - return jni_freerdp_send_unicodekey_event(env, cls, instance, keycode); -} - -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1send_1clipboard_1data - (JNIEnv *env, jclass cls, jint instance, jstring data) -{ - return jni_freerdp_send_clipboard_data(env, cls, instance, data); -} - -JNIEXPORT jstring JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1get_1version(JNIEnv *env, jclass cls) -{ - return jni_freerdp_get_version(env, cls); -} - diff --git a/client/Android/FreeRDPCore/jni/generated/com_freerdp_freerdpcore_services_LibFreeRDP.h b/client/Android/FreeRDPCore/jni/generated/com_freerdp_freerdpcore_services_LibFreeRDP.h deleted file mode 100644 index 50b0c74f8..000000000 --- a/client/Android/FreeRDPCore/jni/generated/com_freerdp_freerdpcore_services_LibFreeRDP.h +++ /dev/null @@ -1,173 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class com_freerdp_freerdpcore_services_LibFreeRDP */ - -#ifndef _Included_com_freerdp_freerdpcore_services_LibFreeRDP -#define _Included_com_freerdp_freerdpcore_services_LibFreeRDP -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_new - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1new - (JNIEnv *, jclass); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_free - * Signature: (I)V - */ -JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1free - (JNIEnv *, jclass, jint); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_connect - * Signature: (I)Z - */ -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1connect - (JNIEnv *, jclass, jint); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_disconnect - * Signature: (I)Z - */ -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1disconnect - (JNIEnv *, jclass, jint); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_cancel_connection - * Signature: (I)Z - */ -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1cancel_1connection - (JNIEnv *, jclass, jint); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_set_connection_info - * Signature: (ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IIIIZILjava/lang/String;)Z - */ -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1connection_1info - (JNIEnv *, jclass, jint, jstring, jstring, jstring, jstring, jint, jint, jint, jint, jboolean, jint, jstring); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_set_performance_flags - * Signature: (IZZZZZZZ)V - */ -JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1performance_1flags - (JNIEnv *, jclass, jint, jboolean, jboolean, jboolean, jboolean, jboolean, jboolean, jboolean); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_set_advanced_settings - * Signature: (ILjava/lang/String;Ljava/lang/String;ZZZZ)Z - */ -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1advanced_1settings - (JNIEnv *, jclass, jint, jstring, jstring, jboolean, jboolean, jboolean, jboolean); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_set_data_directory - * Signature: (ILjava/lang/String;)Z - */ -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1data_1directory - (JNIEnv *, jclass, jint, jstring); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_set_clipboard_redirection - * Signature: (IZ)V - */ -JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1clipboard_1redirection - (JNIEnv *, jclass, jint, jboolean); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_set_sound_redirection - * Signature: (II)Z - */ -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1sound_1redirection - (JNIEnv *, jclass, jint, jint); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_set_microphone_redirection - * Signature: (IZ)Z - */ -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1microphone_1redirection - (JNIEnv *, jclass, jint, jboolean); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_set_drive_redirection - * Signature: (ILjava/lang/String;)Z - */ -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1drive_1redirection - (JNIEnv *, jclass, jint, jstring); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_set_gateway_info - * Signature: (ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z - */ -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1gateway_1info - (JNIEnv *, jclass, jint, jstring, jint, jstring, jstring, jstring); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_update_graphics - * Signature: (ILandroid/graphics/Bitmap;IIII)Z - */ -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1update_1graphics - (JNIEnv *, jclass, jint, jobject, jint, jint, jint, jint); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_send_cursor_event - * Signature: (IIII)Z - */ -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1send_1cursor_1event - (JNIEnv *, jclass, jint, jint, jint, jint); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_send_key_event - * Signature: (IIZ)Z - */ -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1send_1key_1event - (JNIEnv *, jclass, jint, jint, jboolean); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_send_unicodekey_event - * Signature: (II)Z - */ -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1send_1unicodekey_1event - (JNIEnv *, jclass, jint, jint); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_send_clipboard_data - * Signature: (ILjava/lang/String;)Z - */ -JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1send_1clipboard_1data - (JNIEnv *, jclass, jint, jstring); - -/* - * Class: com_freerdp_freerdpcore_services_LibFreeRDP - * Method: freerdp_get_version - * Signature: ()Ljava/lang/String; - */ -JNIEXPORT jstring JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1get_1version - (JNIEnv *, jclass); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/client/Android/FreeRDPCore/lint.xml b/client/Android/FreeRDPCore/lint.xml deleted file mode 100644 index ee0eead5b..000000000 --- a/client/Android/FreeRDPCore/lint.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/client/Android/FreeRDPCore/local.properties.cmake b/client/Android/FreeRDPCore/local.properties.cmake deleted file mode 100644 index 159126370..000000000 --- a/client/Android/FreeRDPCore/local.properties.cmake +++ /dev/null @@ -1,2 +0,0 @@ -# This file is automatically generated by cmake. -sdk.dir=@ANDROID_SDK@ diff --git a/client/Android/FreeRDPCore/project.properties.cmake b/client/Android/FreeRDPCore/project.properties.cmake deleted file mode 100644 index 09c72f4a9..000000000 --- a/client/Android/FreeRDPCore/project.properties.cmake +++ /dev/null @@ -1,16 +0,0 @@ -# This file is automatically generated by Android Tools. -# Do not modify this file -- YOUR CHANGES WILL BE ERASED! -# -# This file must be checked in Version Control Systems. -# -# To customize properties used by the Ant build system edit -# "ant.properties", and override values to adapt the script to your -# project structure. -# -# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): -#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt - -# Project target. -target=android-@ANDROID_APP_TARGET_SDK@ -android.library=true -android.library.reference.1=../appcompat_v7 diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/GlobalApp.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/GlobalApp.java deleted file mode 100644 index eea1bfd4f..000000000 --- a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/GlobalApp.java +++ /dev/null @@ -1,214 +0,0 @@ -/* - Android Main Application - - Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz - - This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. - If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. -*/ - -package com.freerdp.freerdpcore.application; - -import android.app.Application; -import android.content.Intent; -import android.content.IntentFilter; -import android.util.Log; - -import java.util.*; - -import com.freerdp.freerdpcore.application.SessionState; -import com.freerdp.freerdpcore.domain.BookmarkBase; -import com.freerdp.freerdpcore.services.BookmarkDB; -import com.freerdp.freerdpcore.services.HistoryDB; -import com.freerdp.freerdpcore.services.LibFreeRDP; -import com.freerdp.freerdpcore.services.ManualBookmarkGateway; -import com.freerdp.freerdpcore.services.QuickConnectHistoryGateway; - -public class GlobalApp extends Application implements LibFreeRDP.EventListener -{ - private static Map sessionMap; - - public static boolean ConnectedTo3G = false; - - // event notification defines - public static final String EVENT_TYPE = "EVENT_TYPE"; - public static final String EVENT_PARAM = "EVENT_PARAM"; - public static final String EVENT_STATUS = "EVENT_STATUS"; - public static final String EVENT_ERROR = "EVENT_ERROR"; - - public static final String ACTION_EVENT_FREERDP = "com.freerdp.freerdp.event.freerdp"; - - public static final int FREERDP_EVENT_CONNECTION_SUCCESS = 1; - public static final int FREERDP_EVENT_CONNECTION_FAILURE = 2; - public static final int FREERDP_EVENT_DISCONNECTED = 3; - - private static BookmarkDB bookmarkDB; - private static ManualBookmarkGateway manualBookmarkGateway; - - private static HistoryDB historyDB; - private static QuickConnectHistoryGateway quickConnectHistoryGateway; - - // timer for disconnecting sessions after the screen was turned off - private static Timer disconnectTimer = null; - - // TimerTask for disconnecting sessions after screen was turned off - private static class DisconnectTask extends TimerTask - { - @Override - public void run() { - Log.v("DisconnectTask", "Doing action"); - - // disconnect any running rdp session - Collection sessions = GlobalApp.getSessions(); - for (SessionState session : sessions) - { - LibFreeRDP.disconnect(session.getInstance()); - } - } - } - - - public GlobalApp() - { - sessionMap = Collections.synchronizedMap(new HashMap()); - - GlobalApp.load(); - LibFreeRDP.setEventListener(this); - } - - @Override - public void onCreate() - { - super.onCreate(); - - bookmarkDB = new BookmarkDB(this); - - manualBookmarkGateway = new ManualBookmarkGateway(bookmarkDB); - - historyDB = new HistoryDB(this); - quickConnectHistoryGateway = new QuickConnectHistoryGateway(historyDB); - - GlobalSettings.init(this); - ConnectedTo3G = NetworkStateReceiver.isConnectedTo3G(this); - - // init screen receiver here (this can't be declared in AndroidManifest - refer to: - // http://thinkandroid.wordpress.com/2010/01/24/handling-screen-off-and-screen-on-intents/ - IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); - filter.addAction(Intent.ACTION_SCREEN_OFF); - registerReceiver(new ScreenReceiver(), filter); - } - - public static ManualBookmarkGateway getManualBookmarkGateway() - { - return manualBookmarkGateway; - } - - public static QuickConnectHistoryGateway getQuickConnectHistoryGateway() - { - return quickConnectHistoryGateway; - } - - static private void load() - { - final String libname = "freerdp-android"; - final String LD_PATH = System.getProperty("java.library.path"); - - Log.v("LibFreeRDP", "Trying to load library " + libname + " from LD_PATH: " + LD_PATH); - - try { - System.loadLibrary(libname); - } catch (UnsatisfiedLinkError e) { - Log.e("LibFreeRDP", e.toString()); - } - } - - // Disconnect handling for Screen on/off events - static public void startDisconnectTimer() - { - int timeoutMinutes = GlobalSettings.getDisconnectTimeout(); - if (timeoutMinutes > 0) - { - // start disconnect timeout... - disconnectTimer = new Timer(); - disconnectTimer.schedule(new DisconnectTask(), timeoutMinutes * 60 * 1000); - } - } - - static public void cancelDisconnectTimer() - { - // cancel any pending timer events - if (disconnectTimer != null) - { - disconnectTimer.cancel(); - disconnectTimer.purge(); - disconnectTimer = null; - } - } - - // RDP session handling - static public SessionState createSession(BookmarkBase bookmark) - { - SessionState session = new SessionState(LibFreeRDP.newInstance(), bookmark); - sessionMap.put(Integer.valueOf(session.getInstance()), session); - return session; - } - - static public SessionState getSession(int instance) - { - return sessionMap.get(instance); - } - - static public Collection getSessions() - { - // return a copy of the session items - return new ArrayList(sessionMap.values()); - } - - static public void freeSession(int instance) - { - if (GlobalApp.sessionMap.containsKey(instance)) - { - GlobalApp.sessionMap.remove(instance); - LibFreeRDP.freeInstance(instance); - } - } - - // helper to send FreeRDP notifications - private void sendRDPNotification(int type, int param) - { - // send broadcast - Intent intent = new Intent(ACTION_EVENT_FREERDP); - intent.putExtra(EVENT_TYPE, type); - intent.putExtra(EVENT_PARAM, param); - sendBroadcast(intent); - } - - // ////////////////////////////////////////////////////////////////////// - // Implementation of LibFreeRDP.EventListener - public void OnConnectionSuccess(int instance) - { - Log.v("LibFreeRDP", "OnConnectionSuccess"); - sendRDPNotification(FREERDP_EVENT_CONNECTION_SUCCESS, instance); - } - - public void OnConnectionFailure(int instance) - { - Log.v("LibFreeRDP", "OnConnectionFailure"); - - // send notification to session activity - sendRDPNotification(FREERDP_EVENT_CONNECTION_FAILURE, instance); - } - - public void OnDisconnecting(int instance) - { - Log.v("LibFreeRDP", "OnDisconnecting"); - - // send disconnect notification - sendRDPNotification(FREERDP_EVENT_DISCONNECTED, instance); - } - - public void OnDisconnected(int instance) - { - Log.v("LibFreeRDP", "OnDisconnected"); - } -} diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkDB.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkDB.java deleted file mode 100644 index b1f47cb49..000000000 --- a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkDB.java +++ /dev/null @@ -1,228 +0,0 @@ -/* - Android Bookmark Database - - Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz - - This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. - If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. -*/ - -package com.freerdp.freerdpcore.services; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import android.content.Context; -import android.provider.BaseColumns; -import android.util.Log; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteOpenHelper; - -public class BookmarkDB extends SQLiteOpenHelper -{ - private static final int DB_VERSION = 6; - private static final String DB_NAME = "bookmarks.db"; - - public static final String ID = BaseColumns._ID; - - public BookmarkDB(Context context) - { - super(context, DB_NAME, null, DB_VERSION); - } - - @Override - public void onCreate(SQLiteDatabase db) - { - String sqlScreenSettings = - "CREATE TABLE tbl_screen_settings (" - + ID + " INTEGER PRIMARY KEY, " - + "colors INTEGER DEFAULT 16, " - + "resolution INTEGER DEFAULT 0, " - + "width, " - + "height);"; - - db.execSQL(sqlScreenSettings); - - String sqlPerformanceFlags = - "CREATE TABLE tbl_performance_flags (" - + ID + " INTEGER PRIMARY KEY, " - + "perf_remotefx INTEGER, " - + "perf_wallpaper INTEGER, " - + "perf_theming INTEGER, " - + "perf_full_window_drag INTEGER, " - + "perf_menu_animations INTEGER, " - + "perf_font_smoothing INTEGER, " - + "perf_desktop_composition INTEGER);"; - - db.execSQL(sqlPerformanceFlags); - - String sqlManualBookmarks = getManualBookmarksCreationString(); - db.execSQL(sqlManualBookmarks); - - - // Insert a test entry - String sqlInsertDefaultScreenEntry = - "INSERT INTO tbl_screen_settings (" - + "colors, " - + "resolution, " - + "width, " - + "height) " - + "VALUES ( " - + "32, 1, 1024, 768);"; - db.execSQL(sqlInsertDefaultScreenEntry); - db.execSQL(sqlInsertDefaultScreenEntry); - - String sqlInsertDefaultPerfFlags = - "INSERT INTO tbl_performance_flags (" - + "perf_remotefx, " - + "perf_wallpaper, " - + "perf_theming, " - + "perf_full_window_drag, " - + "perf_menu_animations, " - + "perf_font_smoothing, " - + "perf_desktop_composition) " - + "VALUES ( " - + "1, 0, 0, 0, 0, 0, 0);"; - db.execSQL(sqlInsertDefaultPerfFlags); - db.execSQL(sqlInsertDefaultPerfFlags); - - String sqlInsertDefaultSessionEntry = - "INSERT INTO tbl_manual_bookmarks (" - + "label, " - + "hostname, " - + "username, " - + "password, " - + "domain, " - + "port, " - + "screen_settings, " - + "performance_flags, " - + "screen_3g, " - + "performance_3g, " - + "redirect_sdcard, " - + "redirect_sound, " - + "redirect_microphone, " - + "security, " - + "remote_program, " - + "work_dir, " - + "async_channel, " - + "async_transport, " - + "async_input, " - + "async_update, " - + "console_mode, " - + "debug_level ) " - + "VALUES ( " - + "'Test Server', " - + "'testservice.afreerdp.com', " - + "'', " - + "'', " - + "'', " - + "3389, " - + "1, 1, 2, 2, 0, 0, 0, 0, " - + "'', '', " - + "1, 1, 1, 1, 0, 0);"; - db.execSQL(sqlInsertDefaultSessionEntry); - } - - private String getManualBookmarksCreationString() - { - return ( - "CREATE TABLE IF NOT EXISTS tbl_manual_bookmarks (" - + ID + " INTEGER PRIMARY KEY, " - + "label TEXT NOT NULL, " - + "hostname TEXT NOT NULL, " - + "username TEXT NOT NULL, " - + "password TEXT, " - + "domain TEXT, " - + "port TEXT, " - + "screen_settings INTEGER NOT NULL, " - + "performance_flags INTEGER NOT NULL, " - - + "enable_gateway_settings INTEGER DEFAULT 0, " - + "gateway_hostname TEXT, " - + "gateway_port INTEGER DEFAULT 443, " - + "gateway_username TEXT, " - + "gateway_password TEXT, " - + "gateway_domain TEXT, " - - + "enable_3g_settings INTEGER DEFAULT 0, " - + "screen_3g INTEGER NOT NULL, " - + "performance_3g INTEGER NOT NULL, " - + "redirect_sdcard INTEGER DEFAULT 0, " - + "redirect_sound INTEGER DEFAULT 0, " - + "redirect_microphone INTEGER DEFAULT 0, " - + "security INTEGER, " - + "remote_program TEXT, " - + "work_dir TEXT, " - + "async_channel INTEGER DEFAULT 0, " - + "async_transport INTEGER DEFAULT 0, " - + "async_input INTEGER DEFAULT 0, " - + "async_update INTEGER DEFAULT 0, " - + "console_mode INTEGER, " - + "debug_level INTEGER DEFAULT 0, " - - + "FOREIGN KEY(screen_settings) REFERENCES tbl_screen_settings(" + ID + "), " - + "FOREIGN KEY(performance_flags) REFERENCES tbl_performance_flags(" + ID + "), " - + "FOREIGN KEY(screen_3g) REFERENCES tbl_screen_settings(" + ID + "), " - + "FOREIGN KEY(performance_3g) REFERENCES tbl_performance_flags(" + ID + ") " - - + ");"); - } - - // from http://stackoverflow.com/questions/3424156/upgrade-sqlite-database-from-one-version-to-another - @Override - public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) - { - db.beginTransaction(); - - // run a table creation with if not exists (we are doing an upgrade, so the table might - // not exists yet, it will fail alter and drop) - db.execSQL(getManualBookmarksCreationString()); - // put in a list the existing columns - List columns = GetColumns(db, "tbl_manual_bookmarks"); - // backup table - db.execSQL("ALTER TABLE tbl_manual_bookmarks RENAME TO 'temp_tbl_manual_bookmarks'"); - // create new table (with new scheme) - db.execSQL(getManualBookmarksCreationString()); - // get the intersection with the new columns, this time columns taken from the upgraded table - columns.retainAll(GetColumns(db, "tbl_manual_bookmarks")); - // restore data - String cols = joinStrings(columns, ","); - db.execSQL(String.format("INSERT INTO %s (%s) SELECT %s from 'temp_%s", "tbl_manual_bookmarks", cols, cols, "tbl_manual_bookmarks'")); - // remove backup table - db.execSQL("DROP table 'temp_tbl_manual_bookmarks'"); - - db.setTransactionSuccessful(); - db.endTransaction(); - } - - private static List GetColumns(SQLiteDatabase db, String tableName) { - List ar = null; - Cursor c = null; - try { - c = db.rawQuery("SELECT * FROM " + tableName + " LIMIT 1", null); - if (c != null) { - ar = new ArrayList(Arrays.asList(c.getColumnNames())); - } - } catch (Exception e) { - Log.v(tableName, e.getMessage(), e); - e.printStackTrace(); - } finally { - if (c != null) - c.close(); - } - return ar; - } - - private static String joinStrings(List list, String delim) { - StringBuilder buf = new StringBuilder(); - int num = list.size(); - for (int i = 0; i < num; i++) { - if (i != 0) - buf.append(delim); - buf.append((String) list.get(i)); - } - return buf.toString(); - } -} diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/LibFreeRDP.java b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/LibFreeRDP.java deleted file mode 100644 index c5e896f34..000000000 --- a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/LibFreeRDP.java +++ /dev/null @@ -1,308 +0,0 @@ -/* - Android FreeRDP JNI Wrapper - - Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz - - This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. - If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. -*/ - -package com.freerdp.freerdpcore.services; - - -import com.freerdp.freerdpcore.application.GlobalApp; -import com.freerdp.freerdpcore.application.SessionState; -import com.freerdp.freerdpcore.domain.BookmarkBase; -import com.freerdp.freerdpcore.domain.ManualBookmark; - -import android.graphics.Bitmap; - -public class LibFreeRDP -{ - private static native int freerdp_new(); - private static native void freerdp_free(int inst); - private static native boolean freerdp_connect(int inst); - private static native boolean freerdp_disconnect(int inst); - private static native boolean freerdp_cancel_connection(int inst); - - private static native boolean freerdp_set_connection_info(int inst, - String hostname, String username, String password, String domain, - int width, int height, int color_depth, int port, boolean console, - int security, String certname); - - private static native void freerdp_set_performance_flags(int inst, - boolean remotefx, boolean disableWallpaper, boolean disableFullWindowDrag, - boolean disableMenuAnimations, boolean disableTheming, - boolean enableFontSmoothing, boolean enableDesktopComposition); - - private static native boolean freerdp_set_advanced_settings(int inst, - String remoteProgram, String workDir, boolean async_channel, - boolean async_transport, boolean async_input, boolean async_update); - - private static native boolean freerdp_set_data_directory(int inst, String directory); - - private static native void freerdp_set_clipboard_redirection(int inst, boolean enable); - private static native boolean freerdp_set_sound_redirection(int inst, int redirect); - private static native boolean freerdp_set_microphone_redirection(int inst, boolean enable); - private static native boolean freerdp_set_drive_redirection(int inst, String path); - - private static native boolean freerdp_set_gateway_info(int inst, String gatewayhostname, int port, - String gatewayusername, String gatewaypassword, String gatewaydomain); - - private static native boolean freerdp_update_graphics(int inst, - Bitmap bitmap, int x, int y, int width, int height); - - private static native boolean freerdp_send_cursor_event(int inst, int x, int y, int flags); - private static native boolean freerdp_send_key_event(int inst, int keycode, boolean down); - private static native boolean freerdp_send_unicodekey_event(int inst, int keycode); - private static native boolean freerdp_send_clipboard_data(int inst, String data); - - private static native String freerdp_get_version(); - - private static final String TAG = "LibFreeRDP"; - - public static interface EventListener - { - void OnConnectionSuccess(int instance); - void OnConnectionFailure(int instance); - void OnDisconnecting(int instance); - void OnDisconnected(int instance); - } - - public static interface UIEventListener - { - void OnSettingsChanged(int width, int height, int bpp); - boolean OnAuthenticate(StringBuilder username, StringBuilder domain, StringBuilder password); - boolean OnVerifiyCertificate(String subject, String issuer, String fingerprint); - void OnGraphicsUpdate(int x, int y, int width, int height); - void OnGraphicsResize(int width, int height, int bpp); - void OnRemoteClipboardChanged(String data); - } - - private static EventListener listener; - - public static void setEventListener(EventListener l) - { - listener = l; - } - - public static int newInstance() - { - return freerdp_new(); - } - - public static void freeInstance(int inst) - { - freerdp_free(inst); - } - - public static boolean connect(int inst) - { - return freerdp_connect(inst); - } - - public static boolean disconnect(int inst) - { - return freerdp_disconnect(inst); - } - - public static boolean cancelConnection(int inst) - { - return freerdp_cancel_connection(inst); - } - - public static boolean setConnectionInfo(int inst, BookmarkBase bookmark) - { - BookmarkBase.ScreenSettings screenSettings = bookmark.getActiveScreenSettings(); - - int port; - String hostname; - String certName = ""; - if(bookmark.getType() == BookmarkBase.TYPE_MANUAL) - { - port = bookmark.get().getPort(); - hostname = bookmark.get().getHostname(); - } - else - { - assert false; - return false; - } - - freerdp_set_connection_info(inst, - hostname, - bookmark.getUsername(), - bookmark.getPassword(), - bookmark.getDomain(), - screenSettings.getWidth(), - screenSettings.getHeight(), - screenSettings.getColors(), - port, - bookmark.getAdvancedSettings().getConsoleMode(), - bookmark.getAdvancedSettings().getSecurity(), - certName); - - BookmarkBase.PerformanceFlags flags = bookmark.getActivePerformanceFlags(); - freerdp_set_performance_flags(inst, - flags.getRemoteFX(), - !flags.getWallpaper(), - !flags.getFullWindowDrag(), - !flags.getMenuAnimations(), - !flags.getTheming(), - flags.getFontSmoothing(), - flags.getDesktopComposition()); - - BookmarkBase.AdvancedSettings advancedSettings = bookmark.getAdvancedSettings(); - BookmarkBase.DebugSettings debugSettings = bookmark.getDebugSettings(); - freerdp_set_advanced_settings(inst, advancedSettings.getRemoteProgram(), - advancedSettings.getWorkDir(), debugSettings.getAsyncChannel(), - debugSettings.getAsyncTransport(), debugSettings.getAsyncInput(), - debugSettings.getAsyncUpdate()); - - // drive redirection enabled? - if (advancedSettings.getRedirectSDCard()) - freerdp_set_drive_redirection(inst, android.os.Environment.getExternalStorageDirectory().getPath()); - - // always enable clipboard redirection - freerdp_set_clipboard_redirection(inst, true); - - // Gateway enabled? - if (bookmark.getType() == BookmarkBase.TYPE_MANUAL && bookmark.get().getEnableGatewaySettings()) - { - ManualBookmark.GatewaySettings gatewaySettings = bookmark.get().getGatewaySettings(); - freerdp_set_gateway_info(inst, gatewaySettings.getHostname(), gatewaySettings.getPort(), - gatewaySettings.getUsername(), gatewaySettings.getPassword(), gatewaySettings.getDomain()); - } - - // Sound redirection - freerdp_set_sound_redirection(inst, - advancedSettings.getRedirectSound()); - - // Microphone redirection - freerdp_set_microphone_redirection(inst, - advancedSettings.getRedirectMicrophone()); - - return true; - } - - public static boolean setDataDirectory(int inst, String directory) - { - return freerdp_set_data_directory(inst, directory); - } - - public static boolean updateGraphics(int inst, Bitmap bitmap, int x, int y, int width, int height) - { - return freerdp_update_graphics(inst, bitmap, x, y, width, height); - } - - public static boolean sendCursorEvent(int inst, int x, int y, int flags) - { - return freerdp_send_cursor_event(inst, x, y, flags); - } - - public static boolean sendKeyEvent(int inst, int keycode, boolean down) - { - return freerdp_send_key_event(inst, keycode, down); - } - - public static boolean sendUnicodeKeyEvent(int inst, int keycode) - { - return freerdp_send_unicodekey_event(inst, keycode); - } - - public static boolean sendClipboardData(int inst, String data) - { - return freerdp_send_clipboard_data(inst, data); - } - - private static void OnConnectionSuccess(int inst) - { - if (listener != null) - listener.OnConnectionSuccess(inst); - } - - private static void OnConnectionFailure(int inst) - { - if (listener != null) - listener.OnConnectionFailure(inst); - } - - private static void OnDisconnecting(int inst) - { - if (listener != null) - listener.OnDisconnecting(inst); - } - - private static void OnDisconnected(int inst) - { - if (listener != null) - listener.OnDisconnected(inst); - } - - private static void OnSettingsChanged(int inst, int width, int height, int bpp) - { - SessionState s = GlobalApp.getSession(inst); - if (s == null) - return; - UIEventListener uiEventListener = s.getUIEventListener(); - if (uiEventListener != null) - uiEventListener.OnSettingsChanged(width, height, bpp); - } - - private static boolean OnAuthenticate(int inst, StringBuilder username, StringBuilder domain, StringBuilder password) - { - SessionState s = GlobalApp.getSession(inst); - if (s == null) - return false; - UIEventListener uiEventListener = s.getUIEventListener(); - if (uiEventListener != null) - return uiEventListener.OnAuthenticate(username, domain, password); - return false; - } - - private static boolean OnVerifyCertificate(int inst, String subject, String issuer, String fingerprint) - { - SessionState s = GlobalApp.getSession(inst); - if (s == null) - return false; - UIEventListener uiEventListener = s.getUIEventListener(); - if (uiEventListener != null) - return uiEventListener.OnVerifiyCertificate(subject, issuer, fingerprint); - return false; - } - - private static void OnGraphicsUpdate(int inst, int x, int y, int width, int height) - { - SessionState s = GlobalApp.getSession(inst); - if (s == null) - return; - UIEventListener uiEventListener = s.getUIEventListener(); - if (uiEventListener != null) - uiEventListener.OnGraphicsUpdate(x, y, width, height); - } - - private static void OnGraphicsResize(int inst, int width, int height, int bpp) - { - SessionState s = GlobalApp.getSession(inst); - if (s == null) - return; - UIEventListener uiEventListener = s.getUIEventListener(); - if (uiEventListener != null) - uiEventListener.OnGraphicsResize(width, height, bpp); - } - - private static void OnRemoteClipboardChanged(int inst, String data) - { - SessionState s = GlobalApp.getSession(inst); - if (s == null) - return; - UIEventListener uiEventListener = s.getUIEventListener(); - if (uiEventListener != null) - uiEventListener.OnRemoteClipboardChanged(data); - } - - public static String getVersion() - { - return freerdp_get_version(); - } -} diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/BuildConfiguration.java.in b/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/BuildConfiguration.java.in deleted file mode 100644 index e0a72c95a..000000000 --- a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/BuildConfiguration.java.in +++ /dev/null @@ -1,15 +0,0 @@ -package com.freerdp.freerdpcore.utils; - -public class BuildConfiguration { - public static final String WITH_ANDROID_DEBUG_MENU = "@WITH_ANDROID_DEBUG_MENU@"; - - public static final int FREERDP_VERSION_MAJOR = @FREERDP_VERSION_MAJOR@; - public static final int FREERDP_VERSION_MINOR = @FREERDP_VERSION_MINOR@; - public static final int FREERDP_VERSION_REVISION = @FREERDP_VERSION_REVISION@; - - public static final String FREERDP_VERSION_SUFFIX = "@FREERDP_VERSION_SUFFIX@"; - public static final String FREERDP_API_VERSION = "@FREERDP_API_VERSION@"; - public static final String FREERDP_VERSION = "@FREERDP_VERSION@"; - public static final String FREERDP_VERSION_FULL = "@FREERDP_VERSION_FULL@"; - public static final String GIT_REVISION = "@GIT_REVISION@"; - } diff --git a/client/Android/ModuleOptions.cmake b/client/Android/ModuleOptions.cmake deleted file mode 100644 index 38f85b400..000000000 --- a/client/Android/ModuleOptions.cmake +++ /dev/null @@ -1,4 +0,0 @@ - -set(FREERDP_CLIENT_NAME "afreerdp") -set(FREERDP_CLIENT_PLATFORM "Android") -set(FREERDP_CLIENT_VENDOR "FreeRDP") diff --git a/client/Android/Studio/.gitignore b/client/Android/Studio/.gitignore new file mode 100644 index 000000000..a2dc2317b --- /dev/null +++ b/client/Android/Studio/.gitignore @@ -0,0 +1,37 @@ +#built application files +*.apk +*.ap_ + +# files for the dex VM +*.dex + +# Java class files +*.class + +# generated files +bin/ +gen/ + +# Local configuration file (sdk path, etc) +local.properties + +# Windows thumbnail db +Thumbs.db + +# OSX files +.DS_Store + +# Eclipse project files +.classpath +.project + +# Android Studio +*.iml +.idea +#.idea/workspace.xml - remove # and delete .idea if it better suit your needs. +.gradle +build/ + +#NDK +obj/ +jniLibs/ diff --git a/client/Android/Studio/aFreeRDP/build.gradle b/client/Android/Studio/aFreeRDP/build.gradle new file mode 100644 index 000000000..ff43e71cf --- /dev/null +++ b/client/Android/Studio/aFreeRDP/build.gradle @@ -0,0 +1,23 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion 21 + buildToolsVersion "23.0.2" + + defaultConfig { + applicationId "com.freerdp.afreerdp" + minSdkVersion 14 + targetSdkVersion 21 + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' + } + } +} + +dependencies { + compile project(':freeRDPCore') +} diff --git a/client/Android/Studio/aFreeRDP/lint.xml b/client/Android/Studio/aFreeRDP/lint.xml new file mode 100644 index 000000000..8423c0ef9 --- /dev/null +++ b/client/Android/Studio/aFreeRDP/lint.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/Android/aFreeRDP/AndroidManifest.xml.cmake b/client/Android/Studio/aFreeRDP/src/main/AndroidManifest.xml similarity index 90% rename from client/Android/aFreeRDP/AndroidManifest.xml.cmake rename to client/Android/Studio/aFreeRDP/src/main/AndroidManifest.xml index 8cec9833d..420091049 100644 --- a/client/Android/aFreeRDP/AndroidManifest.xml.cmake +++ b/client/Android/Studio/aFreeRDP/src/main/AndroidManifest.xml @@ -1,14 +1,14 @@ - + + android:versionCode="3" + android:versionName="e83f97b" > + android:targetSdkVersion="21" + android:minSdkVersion="14"/> diff --git a/client/Android/aFreeRDP/assets/FreeRDP_Logo.png b/client/Android/Studio/aFreeRDP/src/main/assets/FreeRDP_Logo.png similarity index 100% rename from client/Android/aFreeRDP/assets/FreeRDP_Logo.png rename to client/Android/Studio/aFreeRDP/src/main/assets/FreeRDP_Logo.png diff --git a/client/Android/aFreeRDP/assets/about_page/about.html b/client/Android/Studio/aFreeRDP/src/main/assets/about_page/about.html similarity index 100% rename from client/Android/aFreeRDP/assets/about_page/about.html rename to client/Android/Studio/aFreeRDP/src/main/assets/about_page/about.html diff --git a/client/Android/aFreeRDP/assets/about_page/about_phone.html b/client/Android/Studio/aFreeRDP/src/main/assets/about_page/about_phone.html similarity index 100% rename from client/Android/aFreeRDP/assets/about_page/about_phone.html rename to client/Android/Studio/aFreeRDP/src/main/assets/about_page/about_phone.html diff --git a/client/Android/aFreeRDP/assets/about_page/background_transparent.png b/client/Android/Studio/aFreeRDP/src/main/assets/about_page/background_transparent.png similarity index 100% rename from client/Android/aFreeRDP/assets/about_page/background_transparent.png rename to client/Android/Studio/aFreeRDP/src/main/assets/about_page/background_transparent.png diff --git a/client/Android/aFreeRDP/assets/background.jpg b/client/Android/Studio/aFreeRDP/src/main/assets/background.jpg similarity index 100% rename from client/Android/aFreeRDP/assets/background.jpg rename to client/Android/Studio/aFreeRDP/src/main/assets/background.jpg diff --git a/client/Android/aFreeRDP/assets/de_about_page/about.html b/client/Android/Studio/aFreeRDP/src/main/assets/de_about_page/about.html similarity index 100% rename from client/Android/aFreeRDP/assets/de_about_page/about.html rename to client/Android/Studio/aFreeRDP/src/main/assets/de_about_page/about.html diff --git a/client/Android/aFreeRDP/assets/de_about_page/about_phone.html b/client/Android/Studio/aFreeRDP/src/main/assets/de_about_page/about_phone.html similarity index 100% rename from client/Android/aFreeRDP/assets/de_about_page/about_phone.html rename to client/Android/Studio/aFreeRDP/src/main/assets/de_about_page/about_phone.html diff --git a/client/Android/aFreeRDP/assets/de_about_page/background_transparent.png b/client/Android/Studio/aFreeRDP/src/main/assets/de_about_page/background_transparent.png similarity index 100% rename from client/Android/aFreeRDP/assets/de_about_page/background_transparent.png rename to client/Android/Studio/aFreeRDP/src/main/assets/de_about_page/background_transparent.png diff --git a/client/Android/aFreeRDP/assets/de_help_page/gestures.html b/client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/gestures.html similarity index 100% rename from client/Android/aFreeRDP/assets/de_help_page/gestures.html rename to client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/gestures.html diff --git a/client/Android/aFreeRDP/assets/de_help_page/gestures.png b/client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/gestures.png similarity index 100% rename from client/Android/aFreeRDP/assets/de_help_page/gestures.png rename to client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/gestures.png diff --git a/client/Android/aFreeRDP/assets/de_help_page/gestures_phone.html b/client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/gestures_phone.html similarity index 100% rename from client/Android/aFreeRDP/assets/de_help_page/gestures_phone.html rename to client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/gestures_phone.html diff --git a/client/Android/aFreeRDP/assets/de_help_page/gestures_phone.png b/client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/gestures_phone.png similarity index 100% rename from client/Android/aFreeRDP/assets/de_help_page/gestures_phone.png rename to client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/gestures_phone.png diff --git a/client/Android/aFreeRDP/assets/de_help_page/nav_gestures.png b/client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/nav_gestures.png similarity index 100% rename from client/Android/aFreeRDP/assets/de_help_page/nav_gestures.png rename to client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/nav_gestures.png diff --git a/client/Android/aFreeRDP/assets/de_help_page/nav_toolbar.png b/client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/nav_toolbar.png similarity index 100% rename from client/Android/aFreeRDP/assets/de_help_page/nav_toolbar.png rename to client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/nav_toolbar.png diff --git a/client/Android/aFreeRDP/assets/de_help_page/nav_touch_pointer.png b/client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/nav_touch_pointer.png similarity index 100% rename from client/Android/aFreeRDP/assets/de_help_page/nav_touch_pointer.png rename to client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/nav_touch_pointer.png diff --git a/client/Android/aFreeRDP/assets/de_help_page/toolbar.html b/client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/toolbar.html similarity index 100% rename from client/Android/aFreeRDP/assets/de_help_page/toolbar.html rename to client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/toolbar.html diff --git a/client/Android/aFreeRDP/assets/de_help_page/toolbar.png b/client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/toolbar.png similarity index 100% rename from client/Android/aFreeRDP/assets/de_help_page/toolbar.png rename to client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/toolbar.png diff --git a/client/Android/aFreeRDP/assets/de_help_page/toolbar_phone.html b/client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/toolbar_phone.html similarity index 100% rename from client/Android/aFreeRDP/assets/de_help_page/toolbar_phone.html rename to client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/toolbar_phone.html diff --git a/client/Android/aFreeRDP/assets/de_help_page/toolbar_phone.png b/client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/toolbar_phone.png similarity index 100% rename from client/Android/aFreeRDP/assets/de_help_page/toolbar_phone.png rename to client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/toolbar_phone.png diff --git a/client/Android/aFreeRDP/assets/de_help_page/touch_pointer.html b/client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/touch_pointer.html similarity index 100% rename from client/Android/aFreeRDP/assets/de_help_page/touch_pointer.html rename to client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/touch_pointer.html diff --git a/client/Android/aFreeRDP/assets/de_help_page/touch_pointer.png b/client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/touch_pointer.png similarity index 100% rename from client/Android/aFreeRDP/assets/de_help_page/touch_pointer.png rename to client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/touch_pointer.png diff --git a/client/Android/aFreeRDP/assets/de_help_page/touch_pointer_phone.html b/client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/touch_pointer_phone.html similarity index 100% rename from client/Android/aFreeRDP/assets/de_help_page/touch_pointer_phone.html rename to client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/touch_pointer_phone.html diff --git a/client/Android/aFreeRDP/assets/de_help_page/touch_pointer_phone.png b/client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/touch_pointer_phone.png similarity index 100% rename from client/Android/aFreeRDP/assets/de_help_page/touch_pointer_phone.png rename to client/Android/Studio/aFreeRDP/src/main/assets/de_help_page/touch_pointer_phone.png diff --git a/client/Android/aFreeRDP/assets/help_page/gestures.html b/client/Android/Studio/aFreeRDP/src/main/assets/help_page/gestures.html similarity index 100% rename from client/Android/aFreeRDP/assets/help_page/gestures.html rename to client/Android/Studio/aFreeRDP/src/main/assets/help_page/gestures.html diff --git a/client/Android/aFreeRDP/assets/help_page/gestures.png b/client/Android/Studio/aFreeRDP/src/main/assets/help_page/gestures.png similarity index 100% rename from client/Android/aFreeRDP/assets/help_page/gestures.png rename to client/Android/Studio/aFreeRDP/src/main/assets/help_page/gestures.png diff --git a/client/Android/aFreeRDP/assets/help_page/gestures_phone.html b/client/Android/Studio/aFreeRDP/src/main/assets/help_page/gestures_phone.html similarity index 100% rename from client/Android/aFreeRDP/assets/help_page/gestures_phone.html rename to client/Android/Studio/aFreeRDP/src/main/assets/help_page/gestures_phone.html diff --git a/client/Android/aFreeRDP/assets/help_page/gestures_phone.png b/client/Android/Studio/aFreeRDP/src/main/assets/help_page/gestures_phone.png similarity index 100% rename from client/Android/aFreeRDP/assets/help_page/gestures_phone.png rename to client/Android/Studio/aFreeRDP/src/main/assets/help_page/gestures_phone.png diff --git a/client/Android/aFreeRDP/assets/help_page/nav_gestures.png b/client/Android/Studio/aFreeRDP/src/main/assets/help_page/nav_gestures.png similarity index 100% rename from client/Android/aFreeRDP/assets/help_page/nav_gestures.png rename to client/Android/Studio/aFreeRDP/src/main/assets/help_page/nav_gestures.png diff --git a/client/Android/aFreeRDP/assets/help_page/nav_toolbar.png b/client/Android/Studio/aFreeRDP/src/main/assets/help_page/nav_toolbar.png similarity index 100% rename from client/Android/aFreeRDP/assets/help_page/nav_toolbar.png rename to client/Android/Studio/aFreeRDP/src/main/assets/help_page/nav_toolbar.png diff --git a/client/Android/aFreeRDP/assets/help_page/nav_touch_pointer.png b/client/Android/Studio/aFreeRDP/src/main/assets/help_page/nav_touch_pointer.png similarity index 100% rename from client/Android/aFreeRDP/assets/help_page/nav_touch_pointer.png rename to client/Android/Studio/aFreeRDP/src/main/assets/help_page/nav_touch_pointer.png diff --git a/client/Android/aFreeRDP/assets/help_page/toolbar.html b/client/Android/Studio/aFreeRDP/src/main/assets/help_page/toolbar.html similarity index 100% rename from client/Android/aFreeRDP/assets/help_page/toolbar.html rename to client/Android/Studio/aFreeRDP/src/main/assets/help_page/toolbar.html diff --git a/client/Android/aFreeRDP/assets/help_page/toolbar.png b/client/Android/Studio/aFreeRDP/src/main/assets/help_page/toolbar.png similarity index 100% rename from client/Android/aFreeRDP/assets/help_page/toolbar.png rename to client/Android/Studio/aFreeRDP/src/main/assets/help_page/toolbar.png diff --git a/client/Android/aFreeRDP/assets/help_page/toolbar_phone.html b/client/Android/Studio/aFreeRDP/src/main/assets/help_page/toolbar_phone.html similarity index 100% rename from client/Android/aFreeRDP/assets/help_page/toolbar_phone.html rename to client/Android/Studio/aFreeRDP/src/main/assets/help_page/toolbar_phone.html diff --git a/client/Android/aFreeRDP/assets/help_page/toolbar_phone.png b/client/Android/Studio/aFreeRDP/src/main/assets/help_page/toolbar_phone.png similarity index 100% rename from client/Android/aFreeRDP/assets/help_page/toolbar_phone.png rename to client/Android/Studio/aFreeRDP/src/main/assets/help_page/toolbar_phone.png diff --git a/client/Android/aFreeRDP/assets/help_page/touch_pointer.html b/client/Android/Studio/aFreeRDP/src/main/assets/help_page/touch_pointer.html similarity index 100% rename from client/Android/aFreeRDP/assets/help_page/touch_pointer.html rename to client/Android/Studio/aFreeRDP/src/main/assets/help_page/touch_pointer.html diff --git a/client/Android/aFreeRDP/assets/help_page/touch_pointer.png b/client/Android/Studio/aFreeRDP/src/main/assets/help_page/touch_pointer.png similarity index 100% rename from client/Android/aFreeRDP/assets/help_page/touch_pointer.png rename to client/Android/Studio/aFreeRDP/src/main/assets/help_page/touch_pointer.png diff --git a/client/Android/aFreeRDP/assets/help_page/touch_pointer_phone.html b/client/Android/Studio/aFreeRDP/src/main/assets/help_page/touch_pointer_phone.html similarity index 100% rename from client/Android/aFreeRDP/assets/help_page/touch_pointer_phone.html rename to client/Android/Studio/aFreeRDP/src/main/assets/help_page/touch_pointer_phone.html diff --git a/client/Android/aFreeRDP/assets/help_page/touch_pointer_phone.png b/client/Android/Studio/aFreeRDP/src/main/assets/help_page/touch_pointer_phone.png similarity index 100% rename from client/Android/aFreeRDP/assets/help_page/touch_pointer_phone.png rename to client/Android/Studio/aFreeRDP/src/main/assets/help_page/touch_pointer_phone.png diff --git a/client/Android/aFreeRDP/src/com/freerdp/afreerdp/application/GlobalApp.java b/client/Android/Studio/aFreeRDP/src/main/java/com/freerdp/afreerdp/application/GlobalApp.java similarity index 100% rename from client/Android/aFreeRDP/src/com/freerdp/afreerdp/application/GlobalApp.java rename to client/Android/Studio/aFreeRDP/src/main/java/com/freerdp/afreerdp/application/GlobalApp.java diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/icon_launcher_freerdp.png b/client/Android/Studio/aFreeRDP/src/main/res/drawable-hdpi/icon_launcher_freerdp.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/icon_launcher_freerdp.png rename to client/Android/Studio/aFreeRDP/src/main/res/drawable-hdpi/icon_launcher_freerdp.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/icon_launcher_freerdp.png b/client/Android/Studio/aFreeRDP/src/main/res/drawable-ldpi/icon_launcher_freerdp.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/icon_launcher_freerdp.png rename to client/Android/Studio/aFreeRDP/src/main/res/drawable-ldpi/icon_launcher_freerdp.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/icon_launcher_freerdp.png b/client/Android/Studio/aFreeRDP/src/main/res/drawable-mdpi/icon_launcher_freerdp.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/icon_launcher_freerdp.png rename to client/Android/Studio/aFreeRDP/src/main/res/drawable-mdpi/icon_launcher_freerdp.png diff --git a/client/Android/FreeRDPCore/res/drawable/button_background.xml b/client/Android/Studio/aFreeRDP/src/main/res/drawable/button_background.xml similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/button_background.xml rename to client/Android/Studio/aFreeRDP/src/main/res/drawable/button_background.xml diff --git a/client/Android/FreeRDPCore/res/drawable/icon_launcher_freerdp.png b/client/Android/Studio/aFreeRDP/src/main/res/drawable/icon_launcher_freerdp.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/icon_launcher_freerdp.png rename to client/Android/Studio/aFreeRDP/src/main/res/drawable/icon_launcher_freerdp.png diff --git a/client/Android/FreeRDPCore/res/drawable/separator_background.xml b/client/Android/Studio/aFreeRDP/src/main/res/drawable/separator_background.xml similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/separator_background.xml rename to client/Android/Studio/aFreeRDP/src/main/res/drawable/separator_background.xml diff --git a/client/Android/aFreeRDP/res/values-es/strings.xml b/client/Android/Studio/aFreeRDP/src/main/res/values-es/strings.xml similarity index 80% rename from client/Android/aFreeRDP/res/values-es/strings.xml rename to client/Android/Studio/aFreeRDP/src/main/res/values-es/strings.xml index f0aa7c6af..23ba45774 100644 --- a/client/Android/aFreeRDP/res/values-es/strings.xml +++ b/client/Android/Studio/aFreeRDP/src/main/res/values-es/strings.xml @@ -1,4 +1,4 @@ - + aFreeRDP diff --git a/client/Android/aFreeRDP/res/values-fr/strings.xml b/client/Android/Studio/aFreeRDP/src/main/res/values-fr/strings.xml similarity index 80% rename from client/Android/aFreeRDP/res/values-fr/strings.xml rename to client/Android/Studio/aFreeRDP/src/main/res/values-fr/strings.xml index 3c36d79ff..980236c4b 100644 --- a/client/Android/aFreeRDP/res/values-fr/strings.xml +++ b/client/Android/Studio/aFreeRDP/src/main/res/values-fr/strings.xml @@ -1,4 +1,4 @@ - + aFreeRDP diff --git a/client/Android/aFreeRDP/res/values-nl/strings.xml b/client/Android/Studio/aFreeRDP/src/main/res/values-nl/strings.xml similarity index 80% rename from client/Android/aFreeRDP/res/values-nl/strings.xml rename to client/Android/Studio/aFreeRDP/src/main/res/values-nl/strings.xml index f0aa7c6af..23ba45774 100644 --- a/client/Android/aFreeRDP/res/values-nl/strings.xml +++ b/client/Android/Studio/aFreeRDP/src/main/res/values-nl/strings.xml @@ -1,4 +1,4 @@ - + aFreeRDP diff --git a/client/Android/aFreeRDP/res/values/strings.xml b/client/Android/Studio/aFreeRDP/src/main/res/values/strings.xml similarity index 80% rename from client/Android/aFreeRDP/res/values/strings.xml rename to client/Android/Studio/aFreeRDP/src/main/res/values/strings.xml index f0aa7c6af..23ba45774 100644 --- a/client/Android/aFreeRDP/res/values/strings.xml +++ b/client/Android/Studio/aFreeRDP/src/main/res/values/strings.xml @@ -1,4 +1,4 @@ - + aFreeRDP diff --git a/client/Android/aFreeRDP/res/xml/searchable.xml b/client/Android/Studio/aFreeRDP/src/main/res/xml/searchable.xml similarity index 100% rename from client/Android/aFreeRDP/res/xml/searchable.xml rename to client/Android/Studio/aFreeRDP/src/main/res/xml/searchable.xml diff --git a/client/Android/Studio/build.gradle b/client/Android/Studio/build.gradle new file mode 100644 index 000000000..f4d8c542e --- /dev/null +++ b/client/Android/Studio/build.gradle @@ -0,0 +1,15 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + repositories { + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:1.5.0' + } +} + +allprojects { + repositories { + jcenter() + } +} diff --git a/client/Android/Studio/freeRDPCore/build.gradle b/client/Android/Studio/freeRDPCore/build.gradle new file mode 100644 index 000000000..44467f784 --- /dev/null +++ b/client/Android/Studio/freeRDPCore/build.gradle @@ -0,0 +1,22 @@ +apply plugin: 'com.android.library' + +android { + compileSdkVersion 21 + buildToolsVersion "23.0.2" + + defaultConfig { + minSdkVersion 14 + targetSdkVersion 21 + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' + } + } +} + +dependencies { + compile 'com.android.support:appcompat-v7:21.0.3' +} diff --git a/client/Android/Studio/freeRDPCore/lint.xml b/client/Android/Studio/freeRDPCore/lint.xml new file mode 100644 index 000000000..8423c0ef9 --- /dev/null +++ b/client/Android/Studio/freeRDPCore/lint.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/client/Android/FreeRDPCore/AndroidManifest.xml.cmake b/client/Android/Studio/freeRDPCore/src/main/AndroidManifest.xml similarity index 86% rename from client/Android/FreeRDPCore/AndroidManifest.xml.cmake rename to client/Android/Studio/freeRDPCore/src/main/AndroidManifest.xml index 1e50d7caf..3b7ce2030 100644 --- a/client/Android/FreeRDPCore/AndroidManifest.xml.cmake +++ b/client/Android/Studio/freeRDPCore/src/main/AndroidManifest.xml @@ -1,21 +1,23 @@ - + + android:versionCode="3" + android:versionName="e83f97b" > + android:targetSdkVersion="21" + android:minSdkVersion="14"/> - - + + + + + android:debuggable="false"> sessionMap; + + private static final String TAG = "GlobalApp"; + + public static boolean ConnectedTo3G = false; + + // event notification defines + public static final String EVENT_TYPE = "EVENT_TYPE"; + public static final String EVENT_PARAM = "EVENT_PARAM"; + public static final String EVENT_STATUS = "EVENT_STATUS"; + public static final String EVENT_ERROR = "EVENT_ERROR"; + + public static final String ACTION_EVENT_FREERDP = "com.freerdp.freerdp.event.freerdp"; + + public static final int FREERDP_EVENT_CONNECTION_SUCCESS = 1; + public static final int FREERDP_EVENT_CONNECTION_FAILURE = 2; + public static final int FREERDP_EVENT_DISCONNECTED = 3; + + private static BookmarkDB bookmarkDB; + private static ManualBookmarkGateway manualBookmarkGateway; + + private static HistoryDB historyDB; + private static QuickConnectHistoryGateway quickConnectHistoryGateway; + + // timer for disconnecting sessions after the screen was turned off + private static Timer disconnectTimer = null; + + // TimerTask for disconnecting sessions after screen was turned off + private static class DisconnectTask extends TimerTask { + @Override + public void run() { + Log.v("DisconnectTask", "Doing action"); + + // disconnect any running rdp session + Collection sessions = GlobalApp.getSessions(); + for (SessionState session : sessions) { + LibFreeRDP.disconnect(session.getInstance()); + } + } + } + + + public GlobalApp() { + sessionMap = Collections.synchronizedMap(new HashMap()); + + LibFreeRDP.setEventListener(this); + } + + @Override + public void onCreate() { + super.onCreate(); + + bookmarkDB = new BookmarkDB(this); + + manualBookmarkGateway = new ManualBookmarkGateway(bookmarkDB); + + historyDB = new HistoryDB(this); + quickConnectHistoryGateway = new QuickConnectHistoryGateway(historyDB); + + GlobalSettings.init(this); + ConnectedTo3G = NetworkStateReceiver.isConnectedTo3G(this); + + // init screen receiver here (this can't be declared in AndroidManifest - refer to: + // http://thinkandroid.wordpress.com/2010/01/24/handling-screen-off-and-screen-on-intents/ + IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); + filter.addAction(Intent.ACTION_SCREEN_OFF); + registerReceiver(new ScreenReceiver(), filter); + } + + public static ManualBookmarkGateway getManualBookmarkGateway() { + return manualBookmarkGateway; + } + + public static QuickConnectHistoryGateway getQuickConnectHistoryGateway() { + return quickConnectHistoryGateway; + } + + // Disconnect handling for Screen on/off events + static public void startDisconnectTimer() { + int timeoutMinutes = GlobalSettings.getDisconnectTimeout(); + if (timeoutMinutes > 0) { + // start disconnect timeout... + disconnectTimer = new Timer(); + disconnectTimer.schedule(new DisconnectTask(), timeoutMinutes * 60 * 1000); + } + } + + static public void cancelDisconnectTimer() { + // cancel any pending timer events + if (disconnectTimer != null) { + disconnectTimer.cancel(); + disconnectTimer.purge(); + disconnectTimer = null; + } + } + + // RDP session handling + static public SessionState createSession(BookmarkBase bookmark, Context context) { + SessionState session = new SessionState(LibFreeRDP.newInstance(context), bookmark); + sessionMap.put(Integer.valueOf(session.getInstance()), session); + return session; + } + + static public SessionState getSession(int instance) { + return sessionMap.get(instance); + } + + static public Collection getSessions() { + // return a copy of the session items + return new ArrayList(sessionMap.values()); + } + + static public void freeSession(int instance) { + if (GlobalApp.sessionMap.containsKey(instance)) { + GlobalApp.sessionMap.remove(instance); + LibFreeRDP.freeInstance(instance); + } + } + + // helper to send FreeRDP notifications + private void sendRDPNotification(int type, int param) { + // send broadcast + Intent intent = new Intent(ACTION_EVENT_FREERDP); + intent.putExtra(EVENT_TYPE, type); + intent.putExtra(EVENT_PARAM, param); + sendBroadcast(intent); + } + + @Override + public void OnPreConnect(int instance) { + Log.v(TAG, "OnPreConnect"); + } + + // ////////////////////////////////////////////////////////////////////// + // Implementation of LibFreeRDP.EventListener + public void OnConnectionSuccess(int instance) { + Log.v(TAG, "OnConnectionSuccess"); + sendRDPNotification(FREERDP_EVENT_CONNECTION_SUCCESS, instance); + } + + public void OnConnectionFailure(int instance) { + Log.v(TAG, "OnConnectionFailure"); + + // send notification to session activity + sendRDPNotification(FREERDP_EVENT_CONNECTION_FAILURE, instance); + } + + public void OnDisconnecting(int instance) { + Log.v(TAG, "OnDisconnecting"); + + // send disconnect notification + sendRDPNotification(FREERDP_EVENT_DISCONNECTED, instance); + } + + public void OnDisconnected(int instance) { + Log.v(TAG, "OnDisconnected"); + } +} diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/GlobalSettings.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/application/GlobalSettings.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/GlobalSettings.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/application/GlobalSettings.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/NetworkStateReceiver.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/application/NetworkStateReceiver.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/NetworkStateReceiver.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/application/NetworkStateReceiver.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/ScreenReceiver.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/application/ScreenReceiver.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/ScreenReceiver.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/application/ScreenReceiver.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/SessionState.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/application/SessionState.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/application/SessionState.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/application/SessionState.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/BookmarkBase.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/domain/BookmarkBase.java similarity index 98% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/BookmarkBase.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/domain/BookmarkBase.java index eb8176ca2..eaf1eb68a 100644 --- a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/BookmarkBase.java +++ b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/domain/BookmarkBase.java @@ -27,6 +27,8 @@ public class BookmarkBase implements Parcelable, Cloneable { // performance flags public static class PerformanceFlags implements Parcelable { private boolean remotefx; + private boolean gfx; + private boolean h264; private boolean wallpaper; private boolean theming; private boolean fullWindowDrag; @@ -36,6 +38,8 @@ public class BookmarkBase implements Parcelable, Cloneable { public PerformanceFlags() { remotefx = false; + gfx = false; + h264 = false; wallpaper = false; theming = false; fullWindowDrag = false; @@ -46,6 +50,8 @@ public class BookmarkBase implements Parcelable, Cloneable { public PerformanceFlags(Parcel parcel) { remotefx = parcel.readInt() == 1; + gfx = parcel.readInt() == 1; + h264 = parcel.readInt() == 1; wallpaper = parcel.readInt() == 1; theming = parcel.readInt() == 1; fullWindowDrag = (parcel.readInt() == 1); @@ -57,11 +63,27 @@ public class BookmarkBase implements Parcelable, Cloneable { public boolean getRemoteFX() { return remotefx; } - + public void setRemoteFX(boolean remotefx) { this.remotefx = remotefx; } + public boolean getGfx() { + return gfx; + } + + public void setGfx(boolean gfx) { + this.gfx = gfx; + } + + public boolean getH264() { + return h264; + } + + public void setH264(boolean h264) { + this.h264 = h264; + } + public boolean getWallpaper() { return wallpaper; } @@ -129,6 +151,8 @@ public class BookmarkBase implements Parcelable, Cloneable { @Override public void writeToParcel(Parcel out, int flags) { out.writeInt(remotefx ? 1 : 0); + out.writeInt(gfx ? 1 : 0); + out.writeInt(h264 ? 1 : 0); out.writeInt(wallpaper ? 1 : 0); out.writeInt(theming ? 1 : 0); out.writeInt(fullWindowDrag ? 1 : 0); diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/ConnectionReference.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/domain/ConnectionReference.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/ConnectionReference.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/domain/ConnectionReference.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/ManualBookmark.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/domain/ManualBookmark.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/ManualBookmark.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/domain/ManualBookmark.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/PlaceholderBookmark.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/domain/PlaceholderBookmark.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/PlaceholderBookmark.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/domain/PlaceholderBookmark.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/QuickConnectBookmark.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/domain/QuickConnectBookmark.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/domain/QuickConnectBookmark.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/domain/QuickConnectBookmark.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/AboutActivity.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/AboutActivity.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/AboutActivity.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/AboutActivity.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/ApplicationSettingsActivity.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/ApplicationSettingsActivity.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/ApplicationSettingsActivity.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/ApplicationSettingsActivity.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/BookmarkActivity.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/BookmarkActivity.java similarity index 98% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/BookmarkActivity.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/BookmarkActivity.java index 5df4b776e..9c8140ecb 100644 --- a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/BookmarkActivity.java +++ b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/BookmarkActivity.java @@ -20,7 +20,6 @@ import com.freerdp.freerdpcore.domain.ConnectionReference; import com.freerdp.freerdpcore.domain.ManualBookmark; import com.freerdp.freerdpcore.services.BookmarkBaseGateway; import com.freerdp.freerdpcore.utils.RDPFileParser; -import com.freerdp.freerdpcore.utils.BuildConfiguration; import android.app.AlertDialog; import android.content.ComponentName; @@ -172,16 +171,6 @@ public class BookmarkActivity extends PreferenceActivity implements current_preferences = PREFERENCES_BOOKMARK; } - // Hide debug settings, if not activated. - if (!BuildConfiguration.WITH_ANDROID_DEBUG_MENU - .equalsIgnoreCase("ON")) { - Preference pref = findPreference("bookmark.debug"); - PreferenceCategory cat = (PreferenceCategory)findPreference("category.settings"); - if (pref != null) { - cat.removePreference(pref); - } - } - // update UI with bookmark data SharedPreferences spref = getPreferenceManager().getSharedPreferences(); initSettings(spref); diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/HelpActivity.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/HelpActivity.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/HelpActivity.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/HelpActivity.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/HomeActivity.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/HomeActivity.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/HomeActivity.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/HomeActivity.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/ScrollView2D.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/ScrollView2D.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/ScrollView2D.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/ScrollView2D.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/SessionActivity.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/SessionActivity.java similarity index 91% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/SessionActivity.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/SessionActivity.java index fcae85a57..08bc61395 100644 --- a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/SessionActivity.java +++ b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/SessionActivity.java @@ -83,71 +83,71 @@ public class SessionActivity extends ActionBarActivity implements @Override public void handleMessage(Message msg) { switch (msg.what) { - case GRAPHICS_CHANGED: { - sessionView.onSurfaceChange(session); - scrollView.requestLayout(); - break; - } - case REFRESH_SESSIONVIEW: { - sessionView.invalidateRegion(); - break; - } - case DISPLAY_TOAST: { - Toast errorToast = Toast.makeText(getApplicationContext(), - msg.obj.toString(), Toast.LENGTH_LONG); - errorToast.show(); - break; - } - case HIDE_ZOOMCONTROLS: { - zoomControls.hide(); - break; - } - case SEND_MOVE_EVENT: { - LibFreeRDP.sendCursorEvent(session.getInstance(), msg.arg1, - msg.arg2, Mouse.getMoveEvent()); - break; - } - case SHOW_DIALOG: { - // create and show the dialog - ((Dialog) msg.obj).show(); - break; - } - case SCROLLING_REQUESTED: { - int scrollX = 0; - int scrollY = 0; - float[] pointerPos = touchPointerView.getPointerPosition(); + case GRAPHICS_CHANGED: { + sessionView.onSurfaceChange(session); + scrollView.requestLayout(); + break; + } + case REFRESH_SESSIONVIEW: { + sessionView.invalidateRegion(); + break; + } + case DISPLAY_TOAST: { + Toast errorToast = Toast.makeText(getApplicationContext(), + msg.obj.toString(), Toast.LENGTH_LONG); + errorToast.show(); + break; + } + case HIDE_ZOOMCONTROLS: { + zoomControls.hide(); + break; + } + case SEND_MOVE_EVENT: { + LibFreeRDP.sendCursorEvent(session.getInstance(), msg.arg1, + msg.arg2, Mouse.getMoveEvent()); + break; + } + case SHOW_DIALOG: { + // create and show the dialog + ((Dialog) msg.obj).show(); + break; + } + case SCROLLING_REQUESTED: { + int scrollX = 0; + int scrollY = 0; + float[] pointerPos = touchPointerView.getPointerPosition(); - if (pointerPos[0] > (screen_width - touchPointerView - .getPointerWidth())) - scrollX = SCROLLING_DISTANCE; - else if (pointerPos[0] < 0) - scrollX = -SCROLLING_DISTANCE; + if (pointerPos[0] > (screen_width - touchPointerView + .getPointerWidth())) + scrollX = SCROLLING_DISTANCE; + else if (pointerPos[0] < 0) + scrollX = -SCROLLING_DISTANCE; - if (pointerPos[1] > (screen_height - touchPointerView - .getPointerHeight())) - scrollY = SCROLLING_DISTANCE; - else if (pointerPos[1] < 0) - scrollY = -SCROLLING_DISTANCE; + if (pointerPos[1] > (screen_height - touchPointerView + .getPointerHeight())) + scrollY = SCROLLING_DISTANCE; + else if (pointerPos[1] < 0) + scrollY = -SCROLLING_DISTANCE; - scrollView.scrollBy(scrollX, scrollY); + scrollView.scrollBy(scrollX, scrollY); - // see if we reached the min/max scroll positions - if (scrollView.getScrollX() == 0 - || scrollView.getScrollX() == (sessionView.getWidth() - scrollView - .getWidth())) - scrollX = 0; - if (scrollView.getScrollY() == 0 - || scrollView.getScrollY() == (sessionView.getHeight() - scrollView - .getHeight())) - scrollY = 0; + // see if we reached the min/max scroll positions + if (scrollView.getScrollX() == 0 + || scrollView.getScrollX() == (sessionView.getWidth() - scrollView + .getWidth())) + scrollX = 0; + if (scrollView.getScrollY() == 0 + || scrollView.getScrollY() == (sessionView.getHeight() - scrollView + .getHeight())) + scrollY = 0; - if (scrollX != 0 || scrollY != 0) - uiHandler.sendEmptyMessageDelayed(SCROLLING_REQUESTED, - SCROLLING_TIMEOUT); - else - Log.v(TAG, "Stopping auto-scroll"); - break; - } + if (scrollX != 0 || scrollY != 0) + uiHandler.sendEmptyMessageDelayed(SCROLLING_REQUESTED, + SCROLLING_TIMEOUT); + else + Log.v(TAG, "Stopping auto-scroll"); + break; + } } } } @@ -216,16 +216,16 @@ public class SessionActivity extends ActionBarActivity implements return; switch (intent.getExtras().getInt(GlobalApp.EVENT_TYPE, -1)) { - case GlobalApp.FREERDP_EVENT_CONNECTION_SUCCESS: - OnConnectionSuccess(context); - break; + case GlobalApp.FREERDP_EVENT_CONNECTION_SUCCESS: + OnConnectionSuccess(context); + break; - case GlobalApp.FREERDP_EVENT_CONNECTION_FAILURE: - OnConnectionFailure(context); - break; - case GlobalApp.FREERDP_EVENT_DISCONNECTED: - OnDisconnected(context); - break; + case GlobalApp.FREERDP_EVENT_CONNECTION_FAILURE: + OnConnectionFailure(context); + break; + case GlobalApp.FREERDP_EVENT_DISCONNECTED: + OnDisconnected(context); + break; } } @@ -247,7 +247,7 @@ public class SessionActivity extends ActionBarActivity implements if (ConnectionReference.isHostnameReference(bundle .getString(PARAM_CONNECTION_REFERENCE))) { assert session.getBookmark().getType() == BookmarkBase.TYPE_MANUAL; - String item = session.getBookmark(). get() + String item = session.getBookmark().get() .getHostname(); if (!GlobalApp.getQuickConnectHistoryGateway() .historyItemExists(item)) @@ -361,7 +361,7 @@ public class SessionActivity extends ActionBarActivity implements new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, - int which) { + int which) { callbackDialogResult = true; synchronized (dialog) { dialog.notify(); @@ -372,7 +372,7 @@ public class SessionActivity extends ActionBarActivity implements new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, - int which) { + int which) { callbackDialogResult = false; connectCancelledByUser = true; synchronized (dialog) { @@ -391,7 +391,7 @@ public class SessionActivity extends ActionBarActivity implements new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, - int which) { + int which) { callbackDialogResult = true; synchronized (dialog) { dialog.notify(); @@ -402,7 +402,7 @@ public class SessionActivity extends ActionBarActivity implements new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, - int which) { + int which) { callbackDialogResult = false; connectCancelledByUser = true; synchronized (dialog) { @@ -415,14 +415,14 @@ public class SessionActivity extends ActionBarActivity implements private boolean hasHardwareMenuButton() { if (Build.VERSION.SDK_INT <= 10) return true; - + if (Build.VERSION.SDK_INT >= 14) { boolean rc = false; final ViewConfiguration cfg = ViewConfiguration.get(this); - + return cfg.hasPermanentMenuKey(); } - + return false; } @@ -626,7 +626,7 @@ public class SessionActivity extends ActionBarActivity implements String refStr = bundle.getString(PARAM_CONNECTION_REFERENCE); if (ConnectionReference.isHostnameReference(refStr)) { bookmark = new ManualBookmark(); - bookmark. get().setHostname( + bookmark.get().setHostname( ConnectionReference.getHostname(refStr)); } else if (ConnectionReference.isBookmarkReference(refStr)) { if (ConnectionReference.isManualBookmarkReference(refStr)) @@ -647,13 +647,9 @@ public class SessionActivity extends ActionBarActivity implements } private void connect(BookmarkBase bookmark) { - session = GlobalApp.createSession(bookmark); + session = GlobalApp.createSession(bookmark, getApplicationContext()); session.setUIEventListener(this); - // set writeable data directory - LibFreeRDP.setDataDirectory(session.getInstance(), getFilesDir() - .toString()); - BookmarkBase.ScreenSettings screenSettings = session.getBookmark() .getActiveScreenSettings(); Log.v(TAG, "Screen Resolution: " + screenSettings.getResolutionString()); @@ -712,7 +708,7 @@ public class SessionActivity extends ActionBarActivity implements // displays either the system or the extended keyboard or non of them private void showKeyboard(boolean showSystemKeyboard, - boolean showExtendedKeyboard) { + boolean showExtendedKeyboard) { // no matter what we are doing ... hide the zoom controls // TODO: this is not working correctly as hiding the keyboard issues a // onScrollChange notification showing the control again ... @@ -769,25 +765,25 @@ public class SessionActivity extends ActionBarActivity implements // check if any key is in the keycodes list List keys = modifiersKeyboard.getKeys(); - for (Iterator it = keys.iterator(); it.hasNext();) { + for (Iterator it = keys.iterator(); it.hasNext(); ) { // if the key is a sticky key - just set it to off Keyboard.Key curKey = it.next(); if (curKey.sticky) { switch (keyboardMapper.getModifierState(curKey.codes[0])) { - case KeyboardMapper.KEYSTATE_ON: - curKey.on = true; - curKey.pressed = false; - break; + case KeyboardMapper.KEYSTATE_ON: + curKey.on = true; + curKey.pressed = false; + break; - case KeyboardMapper.KEYSTATE_OFF: - curKey.on = false; - curKey.pressed = false; - break; + case KeyboardMapper.KEYSTATE_OFF: + curKey.on = false; + curKey.pressed = false; + break; - case KeyboardMapper.KEYSTATE_LOCKED: - curKey.on = true; - curKey.pressed = true; - break; + case KeyboardMapper.KEYSTATE_LOCKED: + curKey.on = true; + curKey.pressed = true; + break; } } } @@ -860,6 +856,15 @@ public class SessionActivity extends ActionBarActivity implements keyboardMapper.sendAltF4(); } + @Override + public boolean onKeyLongPress(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + LibFreeRDP.disconnect(session.getInstance()); + return true; + } + return super.onKeyLongPress(keyCode, event); + } + // android keyboard input handling // We always use the unicode value to process input from the android // keyboard except if key modifiers @@ -933,20 +938,20 @@ public class SessionActivity extends ActionBarActivity implements @Override public void switchKeyboard(int keyboardType) { switch (keyboardType) { - case KeyboardMapper.KEYBOARD_TYPE_FUNCTIONKEYS: - keyboardView.setKeyboard(specialkeysKeyboard); - break; + case KeyboardMapper.KEYBOARD_TYPE_FUNCTIONKEYS: + keyboardView.setKeyboard(specialkeysKeyboard); + break; - case KeyboardMapper.KEYBOARD_TYPE_NUMPAD: - keyboardView.setKeyboard(numpadKeyboard); - break; + case KeyboardMapper.KEYBOARD_TYPE_NUMPAD: + keyboardView.setKeyboard(numpadKeyboard); + break; - case KeyboardMapper.KEYBOARD_TYPE_CURSOR: - keyboardView.setKeyboard(cursorKeyboard); - break; + case KeyboardMapper.KEYBOARD_TYPE_CURSOR: + keyboardView.setKeyboard(cursorKeyboard); + break; - default: - break; + default: + break; } } @@ -1020,7 +1025,7 @@ public class SessionActivity extends ActionBarActivity implements @Override public boolean OnAuthenticate(StringBuilder username, StringBuilder domain, - StringBuilder password) { + StringBuilder password) { // this is where the return code of our dialog will be stored callbackDialogResult = false; @@ -1062,7 +1067,7 @@ public class SessionActivity extends ActionBarActivity implements @Override public boolean OnVerifiyCertificate(String subject, String issuer, - String fingerprint) { + String fingerprint) { // see if global settings says accept all if (GlobalSettings.getAcceptAllCertificates()) @@ -1109,7 +1114,7 @@ public class SessionActivity extends ActionBarActivity implements @Override public void onScrollChanged(ScrollView2D scrollView, int x, int y, - int oldx, int oldy) { + int oldx, int oldy) { zoomControls.setIsZoomInEnabled(!sessionView.isAtMaxZoom()); zoomControls.setIsZoomOutEnabled(!sessionView.isAtMinZoom()); if (!GlobalSettings.getHideZoomControls() diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/SessionView.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/SessionView.java similarity index 99% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/SessionView.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/SessionView.java index ea2b0cc07..6d0780690 100644 --- a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/SessionView.java +++ b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/SessionView.java @@ -28,6 +28,8 @@ import com.freerdp.freerdpcore.utils.GestureDetector; public class SessionView extends View { + private static final String TAG = "SessionView"; + public interface SessionViewListener { abstract void onSessionViewBeginTouch(); abstract void onSessionViewEndTouch(); @@ -291,7 +293,7 @@ public class SessionView extends View @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - Log.v("SessionView", width + "x" + height); + Log.v(TAG, width + "x" + height); this.setMeasuredDimension((int)(width * scaleFactor) + touchPointerPaddingWidth, (int)(height * scaleFactor) + touchPointerPaddingHeight); } diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/ShortcutsActivity.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/ShortcutsActivity.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/ShortcutsActivity.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/ShortcutsActivity.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/TouchPointerView.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/TouchPointerView.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/presentation/TouchPointerView.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/presentation/TouchPointerView.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkBaseGateway.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/BookmarkBaseGateway.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/BookmarkBaseGateway.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/BookmarkBaseGateway.java diff --git a/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/BookmarkDB.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/BookmarkDB.java new file mode 100644 index 000000000..7796f440a --- /dev/null +++ b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/BookmarkDB.java @@ -0,0 +1,227 @@ +/* + Android Bookmark Database + + Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz + + This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. +*/ + +package com.freerdp.freerdpcore.services; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import android.content.Context; +import android.provider.BaseColumns; +import android.util.Log; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; + +public class BookmarkDB extends SQLiteOpenHelper { + private static final int DB_VERSION = 7; + private static final String DB_NAME = "bookmarks.db"; + + public static final String ID = BaseColumns._ID; + + public BookmarkDB(Context context) { + super(context, DB_NAME, null, DB_VERSION); + } + + @Override + public void onCreate(SQLiteDatabase db) { + String sqlScreenSettings = + "CREATE TABLE tbl_screen_settings (" + + ID + " INTEGER PRIMARY KEY, " + + "colors INTEGER DEFAULT 16, " + + "resolution INTEGER DEFAULT 0, " + + "width, " + + "height);"; + + db.execSQL(sqlScreenSettings); + + String sqlPerformanceFlags = + "CREATE TABLE tbl_performance_flags (" + + ID + " INTEGER PRIMARY KEY, " + + "perf_remotefx INTEGER, " + + "perf_gfx INTEGER," + + "perf_gfx_h264 INTEGER," + + "perf_wallpaper INTEGER, " + + "perf_theming INTEGER, " + + "perf_full_window_drag INTEGER, " + + "perf_menu_animations INTEGER, " + + "perf_font_smoothing INTEGER, " + + "perf_desktop_composition INTEGER);"; + + db.execSQL(sqlPerformanceFlags); + + String sqlManualBookmarks = getManualBookmarksCreationString(); + db.execSQL(sqlManualBookmarks); + + + // Insert a test entry + String sqlInsertDefaultScreenEntry = + "INSERT INTO tbl_screen_settings (" + + "colors, " + + "resolution, " + + "width, " + + "height) " + + "VALUES ( " + + "32, 1, 1024, 768);"; + db.execSQL(sqlInsertDefaultScreenEntry); + db.execSQL(sqlInsertDefaultScreenEntry); + + String sqlInsertDefaultPerfFlags = + "INSERT INTO tbl_performance_flags (" + + "perf_remotefx, " + + "perf_gfx" + + "perf_gfx_h264" + + "perf_wallpaper, " + + "perf_theming, " + + "perf_full_window_drag, " + + "perf_menu_animations, " + + "perf_font_smoothing, " + + "perf_desktop_composition) " + + "VALUES ( " + + "1, 1, 1, 0, 0, 0, 0, 0, 0);"; + db.execSQL(sqlInsertDefaultPerfFlags); + db.execSQL(sqlInsertDefaultPerfFlags); + + String sqlInsertDefaultSessionEntry = + "INSERT INTO tbl_manual_bookmarks (" + + "label, " + + "hostname, " + + "username, " + + "password, " + + "domain, " + + "port, " + + "screen_settings, " + + "performance_flags, " + + "screen_3g, " + + "performance_3g, " + + "redirect_sdcard, " + + "redirect_sound, " + + "redirect_microphone, " + + "security, " + + "remote_program, " + + "work_dir, " + + "async_channel, " + + "async_transport, " + + "async_input, " + + "async_update, " + + "console_mode, " + + "debug_level ) " + + "VALUES ( " + + "'Test Server', " + + "'testservice.afreerdp.com', " + + "'', " + + "'', " + + "'', " + + "3389, " + + "1, 1, 2, 2, 0, 0, 0, 0, " + + "'', '', " + + "1, 1, 1, 1, 0, 0);"; + db.execSQL(sqlInsertDefaultSessionEntry); + } + + private String getManualBookmarksCreationString() { + return ( + "CREATE TABLE IF NOT EXISTS tbl_manual_bookmarks (" + + ID + " INTEGER PRIMARY KEY, " + + "label TEXT NOT NULL, " + + "hostname TEXT NOT NULL, " + + "username TEXT NOT NULL, " + + "password TEXT, " + + "domain TEXT, " + + "port TEXT, " + + "screen_settings INTEGER NOT NULL, " + + "performance_flags INTEGER NOT NULL, " + + + "enable_gateway_settings INTEGER DEFAULT 0, " + + "gateway_hostname TEXT, " + + "gateway_port INTEGER DEFAULT 443, " + + "gateway_username TEXT, " + + "gateway_password TEXT, " + + "gateway_domain TEXT, " + + + "enable_3g_settings INTEGER DEFAULT 0, " + + "screen_3g INTEGER NOT NULL, " + + "performance_3g INTEGER NOT NULL, " + + "redirect_sdcard INTEGER DEFAULT 0, " + + "redirect_sound INTEGER DEFAULT 0, " + + "redirect_microphone INTEGER DEFAULT 0, " + + "security INTEGER, " + + "remote_program TEXT, " + + "work_dir TEXT, " + + "async_channel INTEGER DEFAULT 0, " + + "async_transport INTEGER DEFAULT 0, " + + "async_input INTEGER DEFAULT 0, " + + "async_update INTEGER DEFAULT 0, " + + "console_mode INTEGER, " + + "debug_level INTEGER DEFAULT 0, " + + + "FOREIGN KEY(screen_settings) REFERENCES tbl_screen_settings(" + ID + "), " + + "FOREIGN KEY(performance_flags) REFERENCES tbl_performance_flags(" + ID + "), " + + "FOREIGN KEY(screen_3g) REFERENCES tbl_screen_settings(" + ID + "), " + + "FOREIGN KEY(performance_3g) REFERENCES tbl_performance_flags(" + ID + ") " + + + ");"); + } + + // from http://stackoverflow.com/questions/3424156/upgrade-sqlite-database-from-one-version-to-another + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + db.beginTransaction(); + + // run a table creation with if not exists (we are doing an upgrade, so the table might + // not exists yet, it will fail alter and drop) + db.execSQL(getManualBookmarksCreationString()); + // put in a list the existing columns + List columns = GetColumns(db, "tbl_manual_bookmarks"); + // backup table + db.execSQL("ALTER TABLE tbl_manual_bookmarks RENAME TO 'temp_tbl_manual_bookmarks'"); + // create new table (with new scheme) + db.execSQL(getManualBookmarksCreationString()); + // get the intersection with the new columns, this time columns taken from the upgraded table + columns.retainAll(GetColumns(db, "tbl_manual_bookmarks")); + // restore data + String cols = joinStrings(columns, ","); + db.execSQL(String.format("INSERT INTO %s (%s) SELECT %s from 'temp_%s", "tbl_manual_bookmarks", cols, cols, "tbl_manual_bookmarks'")); + // remove backup table + db.execSQL("DROP table 'temp_tbl_manual_bookmarks'"); + + db.setTransactionSuccessful(); + db.endTransaction(); + } + + private static List GetColumns(SQLiteDatabase db, String tableName) { + List ar = null; + Cursor c = null; + try { + c = db.rawQuery("SELECT * FROM " + tableName + " LIMIT 1", null); + if (c != null) { + ar = new ArrayList(Arrays.asList(c.getColumnNames())); + } + } catch (Exception e) { + Log.v(tableName, e.getMessage(), e); + e.printStackTrace(); + } finally { + if (c != null) + c.close(); + } + return ar; + } + + private static String joinStrings(List list, String delim) { + StringBuilder buf = new StringBuilder(); + int num = list.size(); + for (int i = 0; i < num; i++) { + if (i != 0) + buf.append(delim); + buf.append((String) list.get(i)); + } + return buf.toString(); + } +} diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/FreeRDPSuggestionProvider.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/FreeRDPSuggestionProvider.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/FreeRDPSuggestionProvider.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/FreeRDPSuggestionProvider.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/HistoryDB.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/HistoryDB.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/HistoryDB.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/HistoryDB.java diff --git a/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/LibFreeRDP.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/LibFreeRDP.java new file mode 100644 index 000000000..c07a5d26e --- /dev/null +++ b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/LibFreeRDP.java @@ -0,0 +1,373 @@ +/* + Android FreeRDP JNI Wrapper + + Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz + + This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. + If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. +*/ + +package com.freerdp.freerdpcore.services; + + +import com.freerdp.freerdpcore.application.GlobalApp; +import com.freerdp.freerdpcore.application.SessionState; +import com.freerdp.freerdpcore.domain.BookmarkBase; +import com.freerdp.freerdpcore.domain.ManualBookmark; + +import android.content.Context; +import android.graphics.Bitmap; +import android.util.Log; + +import java.util.ArrayList; +import java.util.List; + +public class LibFreeRDP { + private static final String TAG = "LibFreeRDP"; + + static { + final String[] libraries = { + "openh264", "crypto", "ssl", "jpeg", "winpr", + "freerdp", "freerdp-client", "freerdp-android"}; + final String LD_PATH = System.getProperty("java.library.path"); + + for (String lib : libraries) { + try { + Log.v(TAG, "Trying to load library " + lib + " from LD_PATH: " + LD_PATH); + System.loadLibrary(lib); + } catch (UnsatisfiedLinkError e) { + Log.e(TAG, "Failed to load library " + lib + ": " + e.toString()); + } + } + } + + private static native String freerdp_get_jni_version(); + + private static native String freerdp_get_version(); + + private static native String freerdp_get_build_date(); + + private static native String freerdp_get_build_revision(); + + private static native String freerdp_get_build_config(); + + private static native int freerdp_new(Context context); + + private static native void freerdp_free(int inst); + + private static native boolean freerdp_parse_arguments(int inst, String[] args); + + private static native boolean freerdp_connect(int inst); + + private static native boolean freerdp_disconnect(int inst); + + private static native boolean freerdp_update_graphics(int inst, + Bitmap bitmap, int x, int y, int width, int height); + + private static native boolean freerdp_send_cursor_event(int inst, int x, int y, int flags); + + private static native boolean freerdp_send_key_event(int inst, int keycode, boolean down); + + private static native boolean freerdp_send_unicodekey_event(int inst, int keycode); + + private static native boolean freerdp_send_clipboard_data(int inst, String data); + + public static interface EventListener { + void OnPreConnect(int instance); + + void OnConnectionSuccess(int instance); + + void OnConnectionFailure(int instance); + + void OnDisconnecting(int instance); + + void OnDisconnected(int instance); + } + + public static interface UIEventListener { + void OnSettingsChanged(int width, int height, int bpp); + + boolean OnAuthenticate(StringBuilder username, StringBuilder domain, StringBuilder password); + + boolean OnVerifiyCertificate(String subject, String issuer, String fingerprint); + + void OnGraphicsUpdate(int x, int y, int width, int height); + + void OnGraphicsResize(int width, int height, int bpp); + + void OnRemoteClipboardChanged(String data); + } + + private static EventListener listener; + + public static void setEventListener(EventListener l) { + listener = l; + } + + public static int newInstance(Context context) { + return freerdp_new(context); + } + + public static void freeInstance(int inst) { + freerdp_free(inst); + } + + public static boolean connect(int inst) { + return freerdp_connect(inst); + } + + public static boolean disconnect(int inst) { + return freerdp_disconnect(inst); + } + + public static boolean cancelConnection(int inst) { + return freerdp_disconnect(inst); + } + + private static String addFlag(String name, boolean enabled) { + if (enabled) { + return "+" + name; + } + return "-" + name; + } + + public static boolean setConnectionInfo(int inst, BookmarkBase bookmark) { + BookmarkBase.ScreenSettings screenSettings = bookmark.getActiveScreenSettings(); + BookmarkBase.AdvancedSettings advanced = bookmark.getAdvancedSettings(); + BookmarkBase.DebugSettings debug = bookmark.getDebugSettings(); + + String arg; + ArrayList args = new ArrayList(); + + args.add(TAG); + args.add("/gdi:sw"); + + String certName = ""; + if (bookmark.getType() != BookmarkBase.TYPE_MANUAL) { + return false; + } + + int port = bookmark.get().getPort(); + String hostname = bookmark.get().getHostname(); + + args.add("/v:" + hostname); + args.add("/port:" + String.valueOf(port)); + + arg = bookmark.getUsername(); + if (!arg.isEmpty()) { + args.add("/u:" + arg); + } + arg = bookmark.getDomain(); + if (!arg.isEmpty()) { + args.add("/d:" + arg); + } + arg = bookmark.getPassword(); + if (!arg.isEmpty()) { + args.add("/p:" + arg); + } + + args.add(String.format("/size:%dx%d", screenSettings.getWidth(), + screenSettings.getHeight())); + args.add("/bpp:" + String.valueOf(screenSettings.getColors())); + + if (advanced.getConsoleMode()) { + args.add("/admin"); + } + + switch (advanced.getSecurity()) { + case 3: // NLA + args.add("/sec-nla"); + break; + case 2: // TLS + args.add("/sec-tls"); + break; + case 1: // RDP + args.add("/sec-rdp"); + break; + default: + break; + } + + if (!certName.isEmpty()) { + args.add("/cert-name:" + certName); + } + + BookmarkBase.PerformanceFlags flags = bookmark.getActivePerformanceFlags(); + if (flags.getRemoteFX()) { + args.add("/rfx"); + } + + if (flags.getGfx()) { + args.add("/gfx"); + } + + if (flags.getH264()) { + args.add("/h264"); + } + + args.add(addFlag("wallpaper", flags.getWallpaper())); + args.add(addFlag("window-drag", flags.getFullWindowDrag())); + args.add(addFlag("menu-anims", flags.getMenuAnimations())); + args.add(addFlag("themes", flags.getTheming())); + args.add(addFlag("fonts", flags.getFontSmoothing())); + args.add(addFlag("aero", flags.getDesktopComposition())); + + if (!advanced.getRemoteProgram().isEmpty()) { + args.add("/app:" + advanced.getRemoteProgram()); + } + + if (!advanced.getWorkDir().isEmpty()) { + args.add("/shell-dir:" + advanced.getWorkDir()); + } + + args.add(addFlag("async-channels", debug.getAsyncChannel())); + args.add(addFlag("async-transport", debug.getAsyncTransport())); + args.add(addFlag("async-input", debug.getAsyncInput())); + args.add(addFlag("async-update", debug.getAsyncUpdate())); + + if (advanced.getRedirectSDCard()) { + String path = android.os.Environment.getExternalStorageDirectory().getPath(); + args.add("/drive:sdcard," + path); + } + + args.add("/clipboard"); + + // Gateway enabled? + if (bookmark.getType() == BookmarkBase.TYPE_MANUAL && bookmark.get().getEnableGatewaySettings()) { + ManualBookmark.GatewaySettings gateway = bookmark.get().getGatewaySettings(); + + args.add(String.format("/g:%s:%d", gateway.getHostname(), gateway.getPort())); + + arg = gateway.getUsername(); + if (!arg.isEmpty()) { + args.add("/gu:" + arg); + } + arg = gateway.getDomain(); + if (!arg.isEmpty()) { + args.add("/gd:" + arg); + } + arg = gateway.getPassword(); + if (!arg.isEmpty()) { + args.add("/gp:" + arg); + } + } + + /* 0 ... disable + 1 ... local + 2 ... remote */ + args.add("/audio-mode:" + String.valueOf(advanced.getRedirectSound())); + + if (advanced.getRedirectMicrophone()) { + args.add("/microphone"); + } + + args.add("/log-level:TRACE"); + String[] arrayArgs = args.toArray(new String[args.size()]); + return freerdp_parse_arguments(inst, arrayArgs); + } + + public static boolean updateGraphics(int inst, Bitmap bitmap, int x, int y, int width, int height) { + return freerdp_update_graphics(inst, bitmap, x, y, width, height); + } + + public static boolean sendCursorEvent(int inst, int x, int y, int flags) { + return freerdp_send_cursor_event(inst, x, y, flags); + } + + public static boolean sendKeyEvent(int inst, int keycode, boolean down) { + return freerdp_send_key_event(inst, keycode, down); + } + + public static boolean sendUnicodeKeyEvent(int inst, int keycode) { + return freerdp_send_unicodekey_event(inst, keycode); + } + + public static boolean sendClipboardData(int inst, String data) { + return freerdp_send_clipboard_data(inst, data); + } + + private static void OnConnectionSuccess(int inst) { + if (listener != null) + listener.OnConnectionSuccess(inst); + } + + private static void OnConnectionFailure(int inst) { + if (listener != null) + listener.OnConnectionFailure(inst); + } + + private static void OnPreConnect(int inst) { + if (listener != null) + listener.OnPreConnect(inst); + } + + private static void OnDisconnecting(int inst) { + if (listener != null) + listener.OnDisconnecting(inst); + } + + private static void OnDisconnected(int inst) { + if (listener != null) + listener.OnDisconnected(inst); + } + + private static void OnSettingsChanged(int inst, int width, int height, int bpp) { + SessionState s = GlobalApp.getSession(inst); + if (s == null) + return; + UIEventListener uiEventListener = s.getUIEventListener(); + if (uiEventListener != null) + uiEventListener.OnSettingsChanged(width, height, bpp); + } + + private static boolean OnAuthenticate(int inst, StringBuilder username, StringBuilder domain, StringBuilder password) { + SessionState s = GlobalApp.getSession(inst); + if (s == null) + return false; + UIEventListener uiEventListener = s.getUIEventListener(); + if (uiEventListener != null) + return uiEventListener.OnAuthenticate(username, domain, password); + return false; + } + + private static boolean OnVerifyCertificate(int inst, String subject, String issuer, String fingerprint) { + SessionState s = GlobalApp.getSession(inst); + if (s == null) + return false; + UIEventListener uiEventListener = s.getUIEventListener(); + if (uiEventListener != null) + return uiEventListener.OnVerifiyCertificate(subject, issuer, fingerprint); + return false; + } + + private static void OnGraphicsUpdate(int inst, int x, int y, int width, int height) { + SessionState s = GlobalApp.getSession(inst); + if (s == null) + return; + UIEventListener uiEventListener = s.getUIEventListener(); + if (uiEventListener != null) + uiEventListener.OnGraphicsUpdate(x, y, width, height); + } + + private static void OnGraphicsResize(int inst, int width, int height, int bpp) { + SessionState s = GlobalApp.getSession(inst); + if (s == null) + return; + UIEventListener uiEventListener = s.getUIEventListener(); + if (uiEventListener != null) + uiEventListener.OnGraphicsResize(width, height, bpp); + } + + private static void OnRemoteClipboardChanged(int inst, String data) { + SessionState s = GlobalApp.getSession(inst); + if (s == null) + return; + UIEventListener uiEventListener = s.getUIEventListener(); + if (uiEventListener != null) + uiEventListener.OnRemoteClipboardChanged(data); + } + + public static String getVersion() { + return freerdp_get_version(); + } +} diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/ManualBookmarkGateway.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/ManualBookmarkGateway.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/ManualBookmarkGateway.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/ManualBookmarkGateway.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/QuickConnectHistoryGateway.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/QuickConnectHistoryGateway.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/QuickConnectHistoryGateway.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/QuickConnectHistoryGateway.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/SessionRequestHandlerActivity.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/SessionRequestHandlerActivity.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/services/SessionRequestHandlerActivity.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/services/SessionRequestHandlerActivity.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/BookmarkArrayAdapter.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/BookmarkArrayAdapter.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/BookmarkArrayAdapter.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/BookmarkArrayAdapter.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/ButtonPreference.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/ButtonPreference.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/ButtonPreference.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/ButtonPreference.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/ClipboardManagerProxy.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/ClipboardManagerProxy.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/ClipboardManagerProxy.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/ClipboardManagerProxy.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/DoubleGestureDetector.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/DoubleGestureDetector.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/DoubleGestureDetector.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/DoubleGestureDetector.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/GestureDetector.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/GestureDetector.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/GestureDetector.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/GestureDetector.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/IntEditTextPreference.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/IntEditTextPreference.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/IntEditTextPreference.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/IntEditTextPreference.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/IntListPreference.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/IntListPreference.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/IntListPreference.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/IntListPreference.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/KeyboardMapper.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/KeyboardMapper.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/KeyboardMapper.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/KeyboardMapper.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/Mouse.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/Mouse.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/Mouse.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/Mouse.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/RDPFileParser.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/RDPFileParser.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/RDPFileParser.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/RDPFileParser.java diff --git a/client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/SeparatedListAdapter.java b/client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/SeparatedListAdapter.java similarity index 100% rename from client/Android/FreeRDPCore/src/com/freerdp/freerdpcore/utils/SeparatedListAdapter.java rename to client/Android/Studio/freeRDPCore/src/main/java/com/freerdp/freerdpcore/utils/SeparatedListAdapter.java diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/icon_button_add.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_button_add.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/icon_button_add.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_button_add.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/icon_edittext_clear.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_edittext_clear.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/icon_edittext_clear.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_edittext_clear.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/icon_edittext_search.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_edittext_search.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/icon_edittext_search.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_edittext_search.png diff --git a/client/Android/aFreeRDP/res/drawable-hdpi/icon_launcher_freerdp.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_launcher_freerdp.png similarity index 100% rename from client/Android/aFreeRDP/res/drawable-hdpi/icon_launcher_freerdp.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_launcher_freerdp.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_about.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_about.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_about.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_about.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_add.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_add.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_add.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_add.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_close.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_close.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_close.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_close.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_disconnect.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_disconnect.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_disconnect.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_disconnect.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_ext_keyboard.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_ext_keyboard.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_ext_keyboard.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_ext_keyboard.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_help.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_help.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_help.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_help.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_preferences.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_preferences.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_preferences.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_preferences.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_settings.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_settings.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_settings.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_settings.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_sys_keyboard.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_sys_keyboard.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_sys_keyboard.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_sys_keyboard.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_touch_pointer.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_touch_pointer.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/icon_menu_touch_pointer.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_menu_touch_pointer.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/icon_star_off.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_star_off.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/icon_star_off.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_star_off.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/icon_star_on.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_star_on.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/icon_star_on.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/icon_star_on.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/search_plate.9.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/search_plate.9.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/search_plate.9.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/search_plate.9.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/sym_keyboard_delete.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/sym_keyboard_delete.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/sym_keyboard_delete.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/sym_keyboard_delete.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/sym_keyboard_feedback_delete.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/sym_keyboard_feedback_delete.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/sym_keyboard_feedback_delete.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/sym_keyboard_feedback_delete.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/sym_keyboard_feedback_return.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/sym_keyboard_feedback_return.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/sym_keyboard_feedback_return.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/sym_keyboard_feedback_return.png diff --git a/client/Android/FreeRDPCore/res/drawable-hdpi/sym_keyboard_return.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/sym_keyboard_return.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-hdpi/sym_keyboard_return.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-hdpi/sym_keyboard_return.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/icon_button_add.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_button_add.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/icon_button_add.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_button_add.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/icon_edittext_search.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_edittext_search.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/icon_edittext_search.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_edittext_search.png diff --git a/client/Android/aFreeRDP/res/drawable-ldpi/icon_launcher_freerdp.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_launcher_freerdp.png similarity index 100% rename from client/Android/aFreeRDP/res/drawable-ldpi/icon_launcher_freerdp.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_launcher_freerdp.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_about.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_about.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_about.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_about.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_add.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_add.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_add.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_add.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_disconnect.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_disconnect.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_disconnect.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_disconnect.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_exit.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_exit.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_exit.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_exit.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_ext_keyboard.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_ext_keyboard.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_ext_keyboard.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_ext_keyboard.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_help.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_help.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_help.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_help.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_preferences.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_preferences.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_preferences.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_preferences.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_settings.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_settings.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_settings.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_settings.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_sys_keyboard.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_sys_keyboard.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_sys_keyboard.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_sys_keyboard.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_touch_pointer.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_touch_pointer.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/icon_menu_touch_pointer.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_menu_touch_pointer.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/icon_star_off.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_star_off.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/icon_star_off.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_star_off.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/icon_star_on.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_star_on.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/icon_star_on.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/icon_star_on.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/search_plate.9.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/search_plate.9.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/search_plate.9.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/search_plate.9.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/sym_keyboard_delete.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/sym_keyboard_delete.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/sym_keyboard_delete.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/sym_keyboard_delete.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/sym_keyboard_feedback_delete.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/sym_keyboard_feedback_delete.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/sym_keyboard_feedback_delete.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/sym_keyboard_feedback_delete.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/sym_keyboard_feedback_return.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/sym_keyboard_feedback_return.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/sym_keyboard_feedback_return.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/sym_keyboard_feedback_return.png diff --git a/client/Android/FreeRDPCore/res/drawable-ldpi/sym_keyboard_return.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/sym_keyboard_return.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-ldpi/sym_keyboard_return.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-ldpi/sym_keyboard_return.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/icon_button_add.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_button_add.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/icon_button_add.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_button_add.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/icon_edittext_clear.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_edittext_clear.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/icon_edittext_clear.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_edittext_clear.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/icon_edittext_search.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_edittext_search.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/icon_edittext_search.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_edittext_search.png diff --git a/client/Android/aFreeRDP/res/drawable-mdpi/icon_launcher_freerdp.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_launcher_freerdp.png similarity index 100% rename from client/Android/aFreeRDP/res/drawable-mdpi/icon_launcher_freerdp.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_launcher_freerdp.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_about.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_about.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_about.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_about.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_add.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_add.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_add.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_add.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_disconnect.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_disconnect.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_disconnect.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_disconnect.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_exit.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_exit.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_exit.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_exit.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_ext_keyboard.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_ext_keyboard.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_ext_keyboard.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_ext_keyboard.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_help.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_help.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_help.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_help.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_preferences.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_preferences.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_preferences.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_preferences.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_settings.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_settings.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_settings.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_settings.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_sys_keyboard.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_sys_keyboard.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_sys_keyboard.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_sys_keyboard.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_touch_pointer.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_touch_pointer.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/icon_menu_touch_pointer.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_menu_touch_pointer.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/icon_star_off.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_star_off.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/icon_star_off.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_star_off.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/icon_star_on.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_star_on.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/icon_star_on.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/icon_star_on.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/search_plate.9.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/search_plate.9.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/search_plate.9.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/search_plate.9.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/sym_keyboard_delete.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/sym_keyboard_delete.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/sym_keyboard_delete.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/sym_keyboard_delete.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/sym_keyboard_feedback_delete.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/sym_keyboard_feedback_delete.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/sym_keyboard_feedback_delete.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/sym_keyboard_feedback_delete.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/sym_keyboard_feedback_return.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/sym_keyboard_feedback_return.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/sym_keyboard_feedback_return.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/sym_keyboard_feedback_return.png diff --git a/client/Android/FreeRDPCore/res/drawable-mdpi/sym_keyboard_return.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/sym_keyboard_return.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable-mdpi/sym_keyboard_return.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable-mdpi/sym_keyboard_return.png diff --git a/client/Android/aFreeRDP/res/drawable/button_background.xml b/client/Android/Studio/freeRDPCore/src/main/res/drawable/button_background.xml similarity index 100% rename from client/Android/aFreeRDP/res/drawable/button_background.xml rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/button_background.xml diff --git a/client/Android/FreeRDPCore/res/drawable/icon_button_cancel.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/icon_button_cancel.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/icon_button_cancel.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/icon_button_cancel.png diff --git a/client/Android/aFreeRDP/res/drawable/icon_launcher_freerdp.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/icon_launcher_freerdp.png similarity index 100% rename from client/Android/aFreeRDP/res/drawable/icon_launcher_freerdp.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/icon_launcher_freerdp.png diff --git a/client/Android/aFreeRDP/res/drawable/separator_background.xml b/client/Android/Studio/freeRDPCore/src/main/res/drawable/separator_background.xml similarity index 100% rename from client/Android/aFreeRDP/res/drawable/separator_background.xml rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/separator_background.xml diff --git a/client/Android/FreeRDPCore/res/drawable/sym_keyboard_arrows.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_arrows.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/sym_keyboard_arrows.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_arrows.png diff --git a/client/Android/FreeRDPCore/res/drawable/sym_keyboard_arrows_black.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_arrows_black.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/sym_keyboard_arrows_black.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_arrows_black.png diff --git a/client/Android/FreeRDPCore/res/drawable/sym_keyboard_down_arrow.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_down_arrow.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/sym_keyboard_down_arrow.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_down_arrow.png diff --git a/client/Android/FreeRDPCore/res/drawable/sym_keyboard_down_arrow_black.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_down_arrow_black.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/sym_keyboard_down_arrow_black.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_down_arrow_black.png diff --git a/client/Android/FreeRDPCore/res/drawable/sym_keyboard_left_arrow.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_left_arrow.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/sym_keyboard_left_arrow.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_left_arrow.png diff --git a/client/Android/FreeRDPCore/res/drawable/sym_keyboard_left_arrow_black.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_left_arrow_black.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/sym_keyboard_left_arrow_black.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_left_arrow_black.png diff --git a/client/Android/FreeRDPCore/res/drawable/sym_keyboard_menu.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_menu.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/sym_keyboard_menu.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_menu.png diff --git a/client/Android/FreeRDPCore/res/drawable/sym_keyboard_menu_black.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_menu_black.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/sym_keyboard_menu_black.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_menu_black.png diff --git a/client/Android/FreeRDPCore/res/drawable/sym_keyboard_right_arrow.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_right_arrow.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/sym_keyboard_right_arrow.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_right_arrow.png diff --git a/client/Android/FreeRDPCore/res/drawable/sym_keyboard_right_arrow_black.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_right_arrow_black.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/sym_keyboard_right_arrow_black.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_right_arrow_black.png diff --git a/client/Android/FreeRDPCore/res/drawable/sym_keyboard_up_arrow.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_up_arrow.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/sym_keyboard_up_arrow.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_up_arrow.png diff --git a/client/Android/FreeRDPCore/res/drawable/sym_keyboard_up_arrow_black.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_up_arrow_black.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/sym_keyboard_up_arrow_black.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_up_arrow_black.png diff --git a/client/Android/FreeRDPCore/res/drawable/sym_keyboard_winkey.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_winkey.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/sym_keyboard_winkey.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_winkey.png diff --git a/client/Android/FreeRDPCore/res/drawable/sym_keyboard_winkey_black.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_winkey_black.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/sym_keyboard_winkey_black.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/sym_keyboard_winkey_black.png diff --git a/client/Android/FreeRDPCore/res/drawable/touch_pointer_active.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/touch_pointer_active.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/touch_pointer_active.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/touch_pointer_active.png diff --git a/client/Android/FreeRDPCore/res/drawable/touch_pointer_default.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/touch_pointer_default.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/touch_pointer_default.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/touch_pointer_default.png diff --git a/client/Android/FreeRDPCore/res/drawable/touch_pointer_extkeyboard.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/touch_pointer_extkeyboard.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/touch_pointer_extkeyboard.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/touch_pointer_extkeyboard.png diff --git a/client/Android/FreeRDPCore/res/drawable/touch_pointer_keyboard.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/touch_pointer_keyboard.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/touch_pointer_keyboard.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/touch_pointer_keyboard.png diff --git a/client/Android/FreeRDPCore/res/drawable/touch_pointer_lclick.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/touch_pointer_lclick.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/touch_pointer_lclick.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/touch_pointer_lclick.png diff --git a/client/Android/FreeRDPCore/res/drawable/touch_pointer_rclick.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/touch_pointer_rclick.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/touch_pointer_rclick.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/touch_pointer_rclick.png diff --git a/client/Android/FreeRDPCore/res/drawable/touch_pointer_reset.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/touch_pointer_reset.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/touch_pointer_reset.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/touch_pointer_reset.png diff --git a/client/Android/FreeRDPCore/res/drawable/touch_pointer_scroll.png b/client/Android/Studio/freeRDPCore/src/main/res/drawable/touch_pointer_scroll.png similarity index 100% rename from client/Android/FreeRDPCore/res/drawable/touch_pointer_scroll.png rename to client/Android/Studio/freeRDPCore/src/main/res/drawable/touch_pointer_scroll.png diff --git a/client/Android/FreeRDPCore/res/layout/bookmark_list_item.xml b/client/Android/Studio/freeRDPCore/src/main/res/layout/bookmark_list_item.xml similarity index 100% rename from client/Android/FreeRDPCore/res/layout/bookmark_list_item.xml rename to client/Android/Studio/freeRDPCore/src/main/res/layout/bookmark_list_item.xml diff --git a/client/Android/FreeRDPCore/res/layout/button_preference.xml b/client/Android/Studio/freeRDPCore/src/main/res/layout/button_preference.xml similarity index 100% rename from client/Android/FreeRDPCore/res/layout/button_preference.xml rename to client/Android/Studio/freeRDPCore/src/main/res/layout/button_preference.xml diff --git a/client/Android/FreeRDPCore/res/layout/credentials.xml b/client/Android/Studio/freeRDPCore/src/main/res/layout/credentials.xml similarity index 100% rename from client/Android/FreeRDPCore/res/layout/credentials.xml rename to client/Android/Studio/freeRDPCore/src/main/res/layout/credentials.xml diff --git a/client/Android/FreeRDPCore/res/layout/dont_show_again_dialog.xml b/client/Android/Studio/freeRDPCore/src/main/res/layout/dont_show_again_dialog.xml similarity index 100% rename from client/Android/FreeRDPCore/res/layout/dont_show_again_dialog.xml rename to client/Android/Studio/freeRDPCore/src/main/res/layout/dont_show_again_dialog.xml diff --git a/client/Android/FreeRDPCore/res/layout/home.xml b/client/Android/Studio/freeRDPCore/src/main/res/layout/home.xml similarity index 96% rename from client/Android/FreeRDPCore/res/layout/home.xml rename to client/Android/Studio/freeRDPCore/src/main/res/layout/home.xml index bc311f573..519bd8327 100644 --- a/client/Android/FreeRDPCore/res/layout/home.xml +++ b/client/Android/Studio/freeRDPCore/src/main/res/layout/home.xml @@ -1,4 +1,4 @@ - + Ja diff --git a/client/Android/FreeRDPCore/res/values-es/strings.xml b/client/Android/Studio/freeRDPCore/src/main/res/values-es/strings.xml similarity index 97% rename from client/Android/FreeRDPCore/res/values-es/strings.xml rename to client/Android/Studio/freeRDPCore/src/main/res/values-es/strings.xml index 192045a0a..161629954 100644 --- a/client/Android/FreeRDPCore/res/values-es/strings.xml +++ b/client/Android/Studio/freeRDPCore/src/main/res/values-es/strings.xml @@ -1,4 +1,4 @@ - + Si diff --git a/client/Android/FreeRDPCore/res/values-fr/strings.xml b/client/Android/Studio/freeRDPCore/src/main/res/values-fr/strings.xml similarity index 100% rename from client/Android/FreeRDPCore/res/values-fr/strings.xml rename to client/Android/Studio/freeRDPCore/src/main/res/values-fr/strings.xml diff --git a/client/Android/FreeRDPCore/res/values-land/dimens.xml b/client/Android/Studio/freeRDPCore/src/main/res/values-land/dimens.xml similarity index 100% rename from client/Android/FreeRDPCore/res/values-land/dimens.xml rename to client/Android/Studio/freeRDPCore/src/main/res/values-land/dimens.xml diff --git a/client/Android/FreeRDPCore/res/values-nl/strings.xml b/client/Android/Studio/freeRDPCore/src/main/res/values-nl/strings.xml similarity index 99% rename from client/Android/FreeRDPCore/res/values-nl/strings.xml rename to client/Android/Studio/freeRDPCore/src/main/res/values-nl/strings.xml index 5a28bb7d9..6167cb12f 100644 --- a/client/Android/FreeRDPCore/res/values-nl/strings.xml +++ b/client/Android/Studio/freeRDPCore/src/main/res/values-nl/strings.xml @@ -1,4 +1,4 @@ - + Ja diff --git a/client/Android/FreeRDPCore/res/values-zh/strings.xml b/client/Android/Studio/freeRDPCore/src/main/res/values-zh/strings.xml similarity index 99% rename from client/Android/FreeRDPCore/res/values-zh/strings.xml rename to client/Android/Studio/freeRDPCore/src/main/res/values-zh/strings.xml index b4514265c..bb98f94c9 100644 --- a/client/Android/FreeRDPCore/res/values-zh/strings.xml +++ b/client/Android/Studio/freeRDPCore/src/main/res/values-zh/strings.xml @@ -1,4 +1,4 @@ - + 是 diff --git a/client/Android/FreeRDPCore/res/values/attrs.xml b/client/Android/Studio/freeRDPCore/src/main/res/values/attrs.xml similarity index 100% rename from client/Android/FreeRDPCore/res/values/attrs.xml rename to client/Android/Studio/freeRDPCore/src/main/res/values/attrs.xml diff --git a/client/Android/FreeRDPCore/res/values/dimens.xml b/client/Android/Studio/freeRDPCore/src/main/res/values/dimens.xml similarity index 100% rename from client/Android/FreeRDPCore/res/values/dimens.xml rename to client/Android/Studio/freeRDPCore/src/main/res/values/dimens.xml diff --git a/client/Android/FreeRDPCore/res/values/integers.xml b/client/Android/Studio/freeRDPCore/src/main/res/values/integers.xml similarity index 100% rename from client/Android/FreeRDPCore/res/values/integers.xml rename to client/Android/Studio/freeRDPCore/src/main/res/values/integers.xml diff --git a/client/Android/FreeRDPCore/res/values/strings.xml b/client/Android/Studio/freeRDPCore/src/main/res/values/strings.xml similarity index 98% rename from client/Android/FreeRDPCore/res/values/strings.xml rename to client/Android/Studio/freeRDPCore/src/main/res/values/strings.xml index d2342e0fe..495c9b85c 100644 --- a/client/Android/FreeRDPCore/res/values/strings.xml +++ b/client/Android/Studio/freeRDPCore/src/main/res/values/strings.xml @@ -1,4 +1,4 @@ - + Yes @@ -27,6 +27,7 @@ Manual Connections Active Sessions + foobar Connect to Computer @@ -97,6 +98,8 @@ Performance Performance Settings RemoteFX + GFX + H264 Desktop Background Font Smoothing Desktop Composition diff --git a/client/Android/FreeRDPCore/res/values/theme.xml b/client/Android/Studio/freeRDPCore/src/main/res/values/theme.xml similarity index 98% rename from client/Android/FreeRDPCore/res/values/theme.xml rename to client/Android/Studio/freeRDPCore/src/main/res/values/theme.xml index 5457b1991..99a6103fa 100644 --- a/client/Android/FreeRDPCore/res/values/theme.xml +++ b/client/Android/Studio/freeRDPCore/src/main/res/values/theme.xml @@ -1,4 +1,4 @@ - +