Merge pull request #1212 from mfleisz/andrdskredir
Android: Added SDCard redirection support
This commit is contained in:
commit
286eb1119e
@ -3,11 +3,6 @@ set(OPTION_DEFAULT OFF)
|
|||||||
set(OPTION_CLIENT_DEFAULT ON)
|
set(OPTION_CLIENT_DEFAULT ON)
|
||||||
set(OPTION_SERVER_DEFAULT OFF)
|
set(OPTION_SERVER_DEFAULT OFF)
|
||||||
|
|
||||||
if(ANDROID)
|
|
||||||
set(OPTION_CLIENT_DEFAULT OFF)
|
|
||||||
set(OPTION_SERVER_DEFAULT OFF)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
define_channel_options(NAME "drive" TYPE "device"
|
define_channel_options(NAME "drive" TYPE "device"
|
||||||
DESCRIPTION "Drive Redirection Virtual Channel Extension"
|
DESCRIPTION "Drive Redirection Virtual Channel Extension"
|
||||||
SPECIFICATIONS "[MS-RDPEFS]"
|
SPECIFICATIONS "[MS-RDPEFS]"
|
||||||
|
@ -462,7 +462,11 @@ BOOL drive_file_set_information(DRIVE_FILE* file, UINT32 FsInformationClass, UIN
|
|||||||
tv[1].tv_usec = 0;
|
tv[1].tv_usec = 0;
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
/* TODO on win32 */
|
/* TODO on win32 */
|
||||||
futimes(file->fd, tv);
|
#ifdef ANDROID
|
||||||
|
utimes(file->fullpath, tv);
|
||||||
|
#else
|
||||||
|
futimes(file->fd, tv);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (FileAttributes > 0)
|
if (FileAttributes > 0)
|
||||||
{
|
{
|
||||||
|
@ -63,6 +63,12 @@ typedef UINT32 mode_t;
|
|||||||
#define FSTAT fstat
|
#define FSTAT fstat
|
||||||
#define STATVFS statvfs
|
#define STATVFS statvfs
|
||||||
#define O_LARGEFILE 0
|
#define O_LARGEFILE 0
|
||||||
|
#elif defined(ANDROID)
|
||||||
|
#define STAT stat
|
||||||
|
#define OPEN open
|
||||||
|
#define LSEEK lseek
|
||||||
|
#define FSTAT fstat
|
||||||
|
#define STATVFS statfs
|
||||||
#else
|
#else
|
||||||
#define STAT stat64
|
#define STAT stat64
|
||||||
#define OPEN open64
|
#define OPEN open64
|
||||||
|
@ -407,7 +407,11 @@ static void drive_process_irp_query_volume_information(DRIVE_DEVICE* disk, IRP*
|
|||||||
stream_write_UINT32(output, 17 + length); /* Length */
|
stream_write_UINT32(output, 17 + length); /* Length */
|
||||||
stream_check_size(output, 17 + length);
|
stream_check_size(output, 17 + length);
|
||||||
stream_write_UINT64(output, FILE_TIME_SYSTEM_TO_RDP(st.st_ctime)); /* VolumeCreationTime */
|
stream_write_UINT64(output, FILE_TIME_SYSTEM_TO_RDP(st.st_ctime)); /* VolumeCreationTime */
|
||||||
|
#ifdef ANDROID
|
||||||
|
stream_write_UINT32(output, svfst.f_fsid.__val[0]); /* VolumeSerialNumber */
|
||||||
|
#else
|
||||||
stream_write_UINT32(output, svfst.f_fsid); /* VolumeSerialNumber */
|
stream_write_UINT32(output, svfst.f_fsid); /* VolumeSerialNumber */
|
||||||
|
#endif
|
||||||
stream_write_UINT32(output, length); /* VolumeLabelLength */
|
stream_write_UINT32(output, length); /* VolumeLabelLength */
|
||||||
stream_write_BYTE(output, 0); /* SupportsObjects */
|
stream_write_BYTE(output, 0); /* SupportsObjects */
|
||||||
/* Reserved(1), MUST NOT be added! */
|
/* Reserved(1), MUST NOT be added! */
|
||||||
@ -434,7 +438,11 @@ static void drive_process_irp_query_volume_information(DRIVE_DEVICE* disk, IRP*
|
|||||||
FILE_CASE_SENSITIVE_SEARCH |
|
FILE_CASE_SENSITIVE_SEARCH |
|
||||||
FILE_CASE_PRESERVED_NAMES |
|
FILE_CASE_PRESERVED_NAMES |
|
||||||
FILE_UNICODE_ON_DISK); /* FileSystemAttributes */
|
FILE_UNICODE_ON_DISK); /* FileSystemAttributes */
|
||||||
|
#ifdef ANDROID
|
||||||
|
stream_write_UINT32(output, 255); /* MaximumComponentNameLength */
|
||||||
|
#else
|
||||||
stream_write_UINT32(output, svfst.f_namemax/*510*/); /* MaximumComponentNameLength */
|
stream_write_UINT32(output, svfst.f_namemax/*510*/); /* MaximumComponentNameLength */
|
||||||
|
#endif
|
||||||
stream_write_UINT32(output, length); /* FileSystemNameLength */
|
stream_write_UINT32(output, length); /* FileSystemNameLength */
|
||||||
stream_write(output, outStr, length); /* FileSystemName (Unicode) */
|
stream_write(output, outStr, length); /* FileSystemName (Unicode) */
|
||||||
free(outStr);
|
free(outStr);
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
<uses-sdk android:targetSdkVersion="8" android:minSdkVersion="8"/>
|
<uses-sdk android:targetSdkVersion="8" android:minSdkVersion="8"/>
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||||
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||||
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||||
<supports-screens android:anyDensity="true" android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" />
|
<supports-screens android:anyDensity="true" android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" />
|
||||||
|
|
||||||
<application>
|
<application>
|
||||||
|
@ -20,6 +20,8 @@
|
|||||||
#include <sys/select.h>
|
#include <sys/select.h>
|
||||||
#include <freerdp/codec/rfx.h>
|
#include <freerdp/codec/rfx.h>
|
||||||
#include <freerdp/channels/channels.h>
|
#include <freerdp/channels/channels.h>
|
||||||
|
#include <freerdp/client/channels.h>
|
||||||
|
#include <freerdp/client/cmdline.h>
|
||||||
#include <freerdp/gdi/gdi.h>
|
#include <freerdp/gdi/gdi.h>
|
||||||
#include <freerdp/utils/event.h>
|
#include <freerdp/utils/event.h>
|
||||||
#include <freerdp/constants.h>
|
#include <freerdp/constants.h>
|
||||||
@ -119,7 +121,8 @@ BOOL android_pre_connect(freerdp* instance)
|
|||||||
|
|
||||||
settings->FrameAcknowledge = 10;
|
settings->FrameAcknowledge = 10;
|
||||||
|
|
||||||
freerdp_channels_load_plugin(instance->context->channels, instance->settings, "tsxlc", NULL);
|
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);
|
freerdp_channels_pre_connect(instance->context->channels, instance);
|
||||||
|
|
||||||
@ -729,6 +732,22 @@ JNIEXPORT void JNICALL jni_freerdp_set_advanced_settings(JNIEnv *env, jclass cls
|
|||||||
(*env)->ReleaseStringUTFChars(env, jWorkDir, work_dir);
|
(*env)->ReleaseStringUTFChars(env, jWorkDir, work_dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void 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", ""};
|
||||||
|
|
||||||
|
const jbyte *path = (*env)->GetStringUTFChars(env, jpath, NULL);
|
||||||
|
DEBUG_ANDROID("drive redirect: %s", (char*)path);
|
||||||
|
|
||||||
|
args[2] = (char*)path;
|
||||||
|
freerdp_client_add_device_channel(settings, 3, args);
|
||||||
|
settings->DeviceRedirection = TRUE;
|
||||||
|
|
||||||
|
(*env)->ReleaseStringUTFChars(env, jpath, path);
|
||||||
|
}
|
||||||
|
|
||||||
void copy_pixel_buffer(UINT8* dstBuf, UINT8* srcBuf, int x, int y, int width, int height, int wBuf, int hBuf, int bpp)
|
void copy_pixel_buffer(UINT8* dstBuf, UINT8* srcBuf, int x, int y, int width, int height, int wBuf, int hBuf, int bpp)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
|
@ -42,6 +42,7 @@ JNIEXPORT void JNICALL jni_freerdp_set_connection_info(JNIEnv *env, jclass cls,
|
|||||||
JNIEXPORT void JNICALL jni_freerdp_set_performance_flags(JNIEnv *env, jclass cls, jint instance, jboolean remotefx, jboolean disableWallpaper, jboolean disableFullWindowDrag,
|
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);
|
jboolean disableMenuAnimations, jboolean disableTheming, jboolean enableFontSmoothing, jboolean enableDesktopComposition);
|
||||||
JNIEXPORT void JNICALL jni_freerdp_set_advanced_settings(JNIEnv *env, jclass cls, jint instance, jstring jRemoteProgram, jstring jWorkDir);
|
JNIEXPORT void JNICALL jni_freerdp_set_advanced_settings(JNIEnv *env, jclass cls, jint instance, jstring jRemoteProgram, jstring jWorkDir);
|
||||||
|
JNIEXPORT void JNICALL jni_freerdp_set_drive_redirection(JNIEnv *env, jclass cls, jint instance, jstring jpath);
|
||||||
JNIEXPORT void JNICALL jni_freerdp_set_data_directory(JNIEnv *env, jclass cls, jint instance, jstring jdirectory);
|
JNIEXPORT void 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_update_graphics(JNIEnv *env, jclass cls, jint instance, jobject bitmap, jint x, jint y, jint width, jint height);
|
||||||
JNIEXPORT void JNICALL jni_freerdp_send_cursor_event(JNIEnv *env, jclass cls, jint instance, jint x, jint y, jint flags);
|
JNIEXPORT void JNICALL jni_freerdp_send_cursor_event(JNIEnv *env, jclass cls, jint instance, jint x, jint y, jint flags);
|
||||||
|
@ -70,6 +70,12 @@ JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_
|
|||||||
jni_freerdp_set_performance_flags(env, cls, instance, remotefx, disableWallpaper, disableFullWindowDrag, disableMenuAnimations, disableTheming, enableFontSmoothing, 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_1drive_1redirection
|
||||||
|
(JNIEnv *env, jclass cls, jint inst, jstring path)
|
||||||
|
{
|
||||||
|
jni_freerdp_set_drive_redirection(env, cls, inst, path);
|
||||||
|
}
|
||||||
|
|
||||||
JNIEXPORT jboolean JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1update_1graphics(
|
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)
|
JNIEnv *env, jclass cls, jint instance, jobject bitmap, jint x, jint y, jint width, jint height)
|
||||||
{
|
{
|
||||||
|
@ -79,6 +79,14 @@ JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_
|
|||||||
JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1data_1directory
|
JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1data_1directory
|
||||||
(JNIEnv *, jclass, jint, jstring);
|
(JNIEnv *, jclass, jint, jstring);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: com_freerdp_freerdpcore_services_LibFreeRDP
|
||||||
|
* Method: freerdp_set_drive_redirection
|
||||||
|
* Signature: (ILjava/lang/String;)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_com_freerdp_freerdpcore_services_LibFreeRDP_freerdp_1set_1drive_1redirection
|
||||||
|
(JNIEnv *, jclass, jint, jstring);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: com_freerdp_freerdpcore_services_LibFreeRDP
|
* Class: com_freerdp_freerdpcore_services_LibFreeRDP
|
||||||
* Method: freerdp_update_graphics
|
* Method: freerdp_update_graphics
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
<string name="section_bookmarks">Conexión Manual</string>
|
<string name="section_bookmarks">Conexión Manual</string>
|
||||||
<string name="section_active_sessions">Sesiones Activas</string>
|
<string name="section_active_sessions">Sesiones Activas</string>
|
||||||
<!-- Search strings -->
|
<!-- Search strings -->
|
||||||
<string name="search_hint">Connectarse a iWinCloud</string>
|
<string name="search_hint">Connect to Computer</string>
|
||||||
<!-- List placeholder labels -->
|
<!-- List placeholder labels -->
|
||||||
<string name="list_placeholder_login">Login</string>
|
<string name="list_placeholder_login">Login</string>
|
||||||
<string name="list_placeholder_no_servers">No hay escritorios virtuales</string>
|
<string name="list_placeholder_no_servers">No hay escritorios virtuales</string>
|
||||||
@ -37,13 +37,13 @@
|
|||||||
<string name="list_placeholder_connection_error">Conexión perdida</string>
|
<string name="list_placeholder_connection_error">Conexión perdida</string>
|
||||||
<string name="list_placeholder_wrong_password">Contraseña equivocada</string>
|
<string name="list_placeholder_wrong_password">Contraseña equivocada</string>
|
||||||
<string name="list_placeholder_invalid_username">Usuario Invalido</string>
|
<string name="list_placeholder_invalid_username">Usuario Invalido</string>
|
||||||
<string name="list_placeholder_add_bookmark">Agregar escritorio virtual de iWinCloud</string>
|
<string name="list_placeholder_add_bookmark">Add Connection</string>
|
||||||
<!-- Bookmark settings strings -->
|
<!-- Bookmark settings strings -->
|
||||||
<string name="settings_cat_host">Host</string>
|
<string name="settings_cat_host">Host</string>
|
||||||
<string name="settings_label">Su nombre</string>
|
<string name="settings_label">Su nombre</string>
|
||||||
<string name="settings_hostname">IP</string>
|
<string name="settings_hostname">IP</string>
|
||||||
<string name="settings_port">Puerto</string>
|
<string name="settings_port">Puerto</string>
|
||||||
<string name="settings_cat_credentials">Credenciales de iWinCloud</string>
|
<string name="settings_cat_credentials">Credenciales</string>
|
||||||
<string name="settings_credentials">Credenciales</string>
|
<string name="settings_credentials">Credenciales</string>
|
||||||
<string name="settings_username">Usuario</string>
|
<string name="settings_username">Usuario</string>
|
||||||
<string name="settings_password">Contraseña</string>
|
<string name="settings_password">Contraseña</string>
|
||||||
@ -105,6 +105,7 @@
|
|||||||
<string name="settings_enable_3g_settings">Configuracion 3G</string>
|
<string name="settings_enable_3g_settings">Configuracion 3G</string>
|
||||||
<string name="settings_screen_3g">Pantalla 3G</string>
|
<string name="settings_screen_3g">Pantalla 3G</string>
|
||||||
<string name="settings_performance_3g">Rendimiento 3G</string>
|
<string name="settings_performance_3g">Rendimiento 3G</string>
|
||||||
|
<string name="settings_redirect_sdcard">Redirect SDCard</string>
|
||||||
<string name="settings_security">Seguridad</string>
|
<string name="settings_security">Seguridad</string>
|
||||||
<string-array name="security_array">
|
<string-array name="security_array">
|
||||||
<item>Automatico</item>
|
<item>Automatico</item>
|
||||||
@ -141,28 +142,28 @@
|
|||||||
<!-- Activity titles -->
|
<!-- Activity titles -->
|
||||||
<string name="title_bookmark_settings">Configuración de la conexión</string>
|
<string name="title_bookmark_settings">Configuración de la conexión</string>
|
||||||
<string name="title_application_settings">Configuración</string>
|
<string name="title_application_settings">Configuración</string>
|
||||||
<string name="title_home">iWinCloud - iWinCloud para Android</string>
|
<string name="title_home">aFreeRDP - aFreeRDP para Android</string>
|
||||||
<string name="title_create_shortcut">Conexiones RDP</string>
|
<string name="title_create_shortcut">Conexiones RDP</string>
|
||||||
<string name="title_help">Ayuda</string>
|
<string name="title_help">Ayuda</string>
|
||||||
<string name="title_about">Sobre</string>
|
<string name="title_about">Sobre</string>
|
||||||
<!-- Error message strings -->
|
<!-- Error message strings -->
|
||||||
<string name="error_bookmark_incomplete_title">Cancelar sin guardar?</string>
|
<string name="error_bookmark_incomplete_title">Cancelar sin guardar?</string>
|
||||||
<string name="error_bookmark_incomplete">Pulse el botón "Cancelar" para abortar! \ NPulse "Continuar" para especificar los campos obligatorios!</string>
|
<string name="error_bookmark_incomplete">Pulse el botón "Cancelar" para abortar! \ NPulse "Continuar" para especificar los campos obligatorios!</string>
|
||||||
<string name="error_connection_failure">No se pudo establecer una conexión con iWinCloud!</string>
|
<string name="error_connection_failure">Failed to establish a connection to the server!</string>
|
||||||
<!-- Info message strings -->
|
<!-- Info message strings -->
|
||||||
<string name="info_capabilities_changed">Los ajustes de pantalla se han cambiado porque el escritorio virtual no es compatible con la configuración especificada!</string>
|
<string name="info_capabilities_changed">Los ajustes de pantalla se han cambiado porque el escritorio virtual no es compatible con la configuración especificada!</string>
|
||||||
<string name="info_reset_success">Eliminado el cache del certificado!</string>
|
<string name="info_reset_success">Eliminado el cache del certificado!</string>
|
||||||
<string name="info_reset_failed">No se pudo borrar el caché del certificado!</string>
|
<string name="info_reset_failed">No se pudo borrar el caché del certificado!</string>
|
||||||
<!-- Dialog strings -->
|
<!-- Dialog strings -->
|
||||||
<string name="dlg_title_verify_certificate">verificar el certificado</string>
|
<string name="dlg_title_verify_certificate">verificar el certificado</string>
|
||||||
<string name="dlg_msg_verify_certificate">La identidad de su escritorio de iWinCloud debe ser verificada. ¿Desea conectarse de todos modos?</string>
|
<string name="dlg_msg_verify_certificate">The identity of the remote computer cannot be verified. Do you want to connect anyway?</string>
|
||||||
<string name="dlg_title_credentials">Por favor, introduzca sus credenciales</string>
|
<string name="dlg_title_credentials">Por favor, introduzca sus credenciales</string>
|
||||||
<string name="dlg_title_create_shortcut">Crear acceso directo</string>
|
<string name="dlg_title_create_shortcut">Crear acceso directo</string>
|
||||||
<string name="dlg_msg_create_shortcut">Nombre corto:</string>
|
<string name="dlg_msg_create_shortcut">Nombre corto:</string>
|
||||||
<string name="dlg_msg_connecting">Conectando ...</string>
|
<string name="dlg_msg_connecting">Conectando ...</string>
|
||||||
<string name="dlg_msg_logging_in">Ingresando a ...</string>
|
<string name="dlg_msg_logging_in">Ingresando a ...</string>
|
||||||
<string name="dlg_title_about">Sobre iWinCloud</string>
|
<string name="dlg_title_about">Sobre aFreeRDP</string>
|
||||||
<string name="dlg_msg_about">Version: %1$s\n\u00A9 2012 iWinCloud LLc</string>
|
<string name="dlg_msg_about">Version: %1$s\n\u00A9 2012 Thinstuff Technologies GmbH</string>
|
||||||
<string name="dlg_title_create_bookmark_after_qc">Guardar configuración de conexión?</string>
|
<string name="dlg_title_create_bookmark_after_qc">Guardar configuración de conexión?</string>
|
||||||
<string name="dlg_msg_create_bookmark_after_qc">La configuración de conexión no se han guardado! ¿Quieres guardarlos?</string>
|
<string name="dlg_msg_create_bookmark_after_qc">La configuración de conexión no se han guardado! ¿Quieres guardarlos?</string>
|
||||||
<string name="dlg_title_save_bookmark">Guardar Conexión</string>
|
<string name="dlg_title_save_bookmark">Guardar Conexión</string>
|
||||||
|
@ -104,6 +104,7 @@
|
|||||||
<string name="settings_enable_3g_settings">"Paramètres 3G"</string>
|
<string name="settings_enable_3g_settings">"Paramètres 3G"</string>
|
||||||
<string name="settings_screen_3g">"Écran 3G"</string>
|
<string name="settings_screen_3g">"Écran 3G"</string>
|
||||||
<string name="settings_performance_3g">"Performance 3G"</string>
|
<string name="settings_performance_3g">"Performance 3G"</string>
|
||||||
|
<string name="settings_redirect_sdcard">"Redirect SDCard"</string>
|
||||||
<string name="settings_security">"Securité"</string>
|
<string name="settings_security">"Securité"</string>
|
||||||
<string-array name="security_array">
|
<string-array name="security_array">
|
||||||
<item>"Automatique"</item>
|
<item>"Automatique"</item>
|
||||||
|
@ -105,6 +105,7 @@
|
|||||||
<string name="settings_enable_3g_settings">3G Settings</string>
|
<string name="settings_enable_3g_settings">3G Settings</string>
|
||||||
<string name="settings_screen_3g">3G Screen</string>
|
<string name="settings_screen_3g">3G Screen</string>
|
||||||
<string name="settings_performance_3g">3G Performance</string>
|
<string name="settings_performance_3g">3G Performance</string>
|
||||||
|
<string name="settings_redirect_sdcard">Redirect SDCard</string>
|
||||||
<string name="settings_security">Security</string>
|
<string name="settings_security">Security</string>
|
||||||
<string-array name="security_array">
|
<string-array name="security_array">
|
||||||
<item>Automatic</item>
|
<item>Automatic</item>
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
android:data="preferences://performance_flags_3g" />
|
android:data="preferences://performance_flags_3g" />
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
||||||
|
<CheckBoxPreference android:key="bookmark.redirect_sdcard" android:title="@string/settings_redirect_sdcard"/>
|
||||||
<com.freerdp.freerdpcore.utils.IntListPreference android:key="bookmark.security" android:title="@string/settings_security" android:entries="@array/security_array" android:entryValues="@array/security_values_array" />
|
<com.freerdp.freerdpcore.utils.IntListPreference android:key="bookmark.security" android:title="@string/settings_security" android:entries="@array/security_array" android:entryValues="@array/security_values_array" />
|
||||||
<EditTextPreference android:key="bookmark.remote_program" android:title="@string/settings_remote_program" android:summary="notepad.exe"/>
|
<EditTextPreference android:key="bookmark.remote_program" android:title="@string/settings_remote_program" android:summary="notepad.exe"/>
|
||||||
<EditTextPreference android:key="bookmark.work_dir" android:title="@string/settings_work_dir"/>
|
<EditTextPreference android:key="bookmark.work_dir" android:title="@string/settings_work_dir"/>
|
||||||
|
@ -284,6 +284,7 @@ public class BookmarkBase implements Parcelable, Cloneable
|
|||||||
private boolean enable3GSettings;
|
private boolean enable3GSettings;
|
||||||
private ScreenSettings screen3G;
|
private ScreenSettings screen3G;
|
||||||
private PerformanceFlags performance3G;
|
private PerformanceFlags performance3G;
|
||||||
|
private boolean redirectSDCard;
|
||||||
private int security;
|
private int security;
|
||||||
private boolean consoleMode;
|
private boolean consoleMode;
|
||||||
private String remoteProgram;
|
private String remoteProgram;
|
||||||
@ -297,6 +298,7 @@ public class BookmarkBase implements Parcelable, Cloneable
|
|||||||
enable3GSettings = (parcel.readInt() == 1) ? true : false;
|
enable3GSettings = (parcel.readInt() == 1) ? true : false;
|
||||||
screen3G = parcel.readParcelable(ScreenSettings.class.getClassLoader());
|
screen3G = parcel.readParcelable(ScreenSettings.class.getClassLoader());
|
||||||
performance3G = parcel.readParcelable(PerformanceFlags.class.getClassLoader());
|
performance3G = parcel.readParcelable(PerformanceFlags.class.getClassLoader());
|
||||||
|
redirectSDCard = (parcel.readInt() == 1) ? true : false;
|
||||||
security = parcel.readInt();
|
security = parcel.readInt();
|
||||||
consoleMode = (parcel.readInt() == 1) ? true : false;
|
consoleMode = (parcel.readInt() == 1) ? true : false;
|
||||||
remoteProgram = parcel.readString();
|
remoteProgram = parcel.readString();
|
||||||
@ -307,6 +309,7 @@ public class BookmarkBase implements Parcelable, Cloneable
|
|||||||
enable3GSettings = false;
|
enable3GSettings = false;
|
||||||
screen3G = new ScreenSettings();
|
screen3G = new ScreenSettings();
|
||||||
performance3G = new PerformanceFlags();
|
performance3G = new PerformanceFlags();
|
||||||
|
redirectSDCard = false;
|
||||||
security = 0;
|
security = 0;
|
||||||
consoleMode = false;
|
consoleMode = false;
|
||||||
remoteProgram = "";
|
remoteProgram = "";
|
||||||
@ -337,6 +340,14 @@ public class BookmarkBase implements Parcelable, Cloneable
|
|||||||
this.performance3G = performance3G;
|
this.performance3G = performance3G;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setRedirectSDCard(boolean redirectSDCard) {
|
||||||
|
this.redirectSDCard = redirectSDCard;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getRedirectSDCard() {
|
||||||
|
return redirectSDCard;
|
||||||
|
}
|
||||||
|
|
||||||
public void setSecurity(int security) {
|
public void setSecurity(int security) {
|
||||||
this.security = security;
|
this.security = security;
|
||||||
}
|
}
|
||||||
@ -396,6 +407,7 @@ public class BookmarkBase implements Parcelable, Cloneable
|
|||||||
out.writeInt(enable3GSettings ? 1 : 0);
|
out.writeInt(enable3GSettings ? 1 : 0);
|
||||||
out.writeParcelable(screen3G, flags);
|
out.writeParcelable(screen3G, flags);
|
||||||
out.writeParcelable(performance3G, flags);
|
out.writeParcelable(performance3G, flags);
|
||||||
|
out.writeInt(redirectSDCard ? 1 : 0);
|
||||||
out.writeInt(security);
|
out.writeInt(security);
|
||||||
out.writeInt(consoleMode ? 1 : 0);
|
out.writeInt(consoleMode ? 1 : 0);
|
||||||
out.writeString(remoteProgram);
|
out.writeString(remoteProgram);
|
||||||
@ -597,6 +609,7 @@ public class BookmarkBase implements Parcelable, Cloneable
|
|||||||
editor.putBoolean("bookmark.perf_menu_animation_3g", advancedSettings.getPerformance3G().getMenuAnimations());
|
editor.putBoolean("bookmark.perf_menu_animation_3g", advancedSettings.getPerformance3G().getMenuAnimations());
|
||||||
editor.putBoolean("bookmark.perf_themes_3g", advancedSettings.getPerformance3G().getTheming());
|
editor.putBoolean("bookmark.perf_themes_3g", advancedSettings.getPerformance3G().getTheming());
|
||||||
|
|
||||||
|
editor.putBoolean("bookmark.redirect_sdcard", advancedSettings.getRedirectSDCard());
|
||||||
editor.putInt("bookmark.security", advancedSettings.getSecurity());
|
editor.putInt("bookmark.security", advancedSettings.getSecurity());
|
||||||
editor.putString("bookmark.remote_program", advancedSettings.getRemoteProgram());
|
editor.putString("bookmark.remote_program", advancedSettings.getRemoteProgram());
|
||||||
editor.putString("bookmark.work_dir", advancedSettings.getWorkDir());
|
editor.putString("bookmark.work_dir", advancedSettings.getWorkDir());
|
||||||
@ -638,6 +651,7 @@ public class BookmarkBase implements Parcelable, Cloneable
|
|||||||
advancedSettings.getPerformance3G().setMenuAnimations(sharedPrefs.getBoolean("bookmark.perf_menu_animation_3g", false));
|
advancedSettings.getPerformance3G().setMenuAnimations(sharedPrefs.getBoolean("bookmark.perf_menu_animation_3g", false));
|
||||||
advancedSettings.getPerformance3G().setTheming(sharedPrefs.getBoolean("bookmark.perf_themes_3g", false));
|
advancedSettings.getPerformance3G().setTheming(sharedPrefs.getBoolean("bookmark.perf_themes_3g", false));
|
||||||
|
|
||||||
|
advancedSettings.setRedirectSDCard(sharedPrefs.getBoolean("bookmark.redirect_sdcard", false));
|
||||||
advancedSettings.setSecurity(sharedPrefs.getInt("bookmark.security", 0));
|
advancedSettings.setSecurity(sharedPrefs.getInt("bookmark.security", 0));
|
||||||
advancedSettings.setRemoteProgram(sharedPrefs.getString("bookmark.remote_program", ""));
|
advancedSettings.setRemoteProgram(sharedPrefs.getString("bookmark.remote_program", ""));
|
||||||
advancedSettings.setWorkDir(sharedPrefs.getString("bookmark.work_dir", ""));
|
advancedSettings.setWorkDir(sharedPrefs.getString("bookmark.work_dir", ""));
|
||||||
|
@ -63,6 +63,7 @@ public abstract class BookmarkBaseGateway
|
|||||||
values.put("screen_3g", rowid);
|
values.put("screen_3g", rowid);
|
||||||
rowid = insertPerformanceFlags(db, bookmark.getAdvancedSettings().getPerformance3G());
|
rowid = insertPerformanceFlags(db, bookmark.getAdvancedSettings().getPerformance3G());
|
||||||
values.put("performance_3g", rowid);
|
values.put("performance_3g", rowid);
|
||||||
|
values.put("redirect_sdcard", bookmark.getAdvancedSettings().getRedirectSDCard());
|
||||||
values.put("security", bookmark.getAdvancedSettings().getSecurity());
|
values.put("security", bookmark.getAdvancedSettings().getSecurity());
|
||||||
values.put("console_mode", bookmark.getAdvancedSettings().getConsoleMode());
|
values.put("console_mode", bookmark.getAdvancedSettings().getConsoleMode());
|
||||||
values.put("remote_program", bookmark.getAdvancedSettings().getRemoteProgram());
|
values.put("remote_program", bookmark.getAdvancedSettings().getRemoteProgram());
|
||||||
@ -98,6 +99,7 @@ public abstract class BookmarkBaseGateway
|
|||||||
// update 3G screen and 3G performance settings settings
|
// update 3G screen and 3G performance settings settings
|
||||||
updateScreenSettings3G(db, bookmark);
|
updateScreenSettings3G(db, bookmark);
|
||||||
updatePerformanceFlags3G(db, bookmark);
|
updatePerformanceFlags3G(db, bookmark);
|
||||||
|
values.put("redirect_sdcard", bookmark.getAdvancedSettings().getRedirectSDCard());
|
||||||
values.put("security", bookmark.getAdvancedSettings().getSecurity());
|
values.put("security", bookmark.getAdvancedSettings().getSecurity());
|
||||||
values.put("console_mode", bookmark.getAdvancedSettings().getConsoleMode());
|
values.put("console_mode", bookmark.getAdvancedSettings().getConsoleMode());
|
||||||
values.put("remote_program", bookmark.getAdvancedSettings().getRemoteProgram());
|
values.put("remote_program", bookmark.getAdvancedSettings().getRemoteProgram());
|
||||||
@ -216,6 +218,7 @@ public abstract class BookmarkBaseGateway
|
|||||||
|
|
||||||
// advanced settings
|
// advanced settings
|
||||||
columns.add("enable_3g_settings");
|
columns.add("enable_3g_settings");
|
||||||
|
columns.add("redirect_sdcard");
|
||||||
columns.add("security");
|
columns.add("security");
|
||||||
columns.add("console_mode");
|
columns.add("console_mode");
|
||||||
columns.add("remote_program");
|
columns.add("remote_program");
|
||||||
@ -273,6 +276,7 @@ public abstract class BookmarkBaseGateway
|
|||||||
bookmark.getAdvancedSettings().setEnable3GSettings(cursor.getInt(cursor.getColumnIndex("enable_3g_settings")) == 0 ? false : true);
|
bookmark.getAdvancedSettings().setEnable3GSettings(cursor.getInt(cursor.getColumnIndex("enable_3g_settings")) == 0 ? false : true);
|
||||||
readScreenSettings3G(bookmark, cursor);
|
readScreenSettings3G(bookmark, cursor);
|
||||||
readPerformanceFlags3G(bookmark, cursor);
|
readPerformanceFlags3G(bookmark, cursor);
|
||||||
|
bookmark.getAdvancedSettings().setRedirectSDCard(cursor.getInt(cursor.getColumnIndex("redirect_sdcard")) == 0 ? false : true);
|
||||||
bookmark.getAdvancedSettings().setSecurity(cursor.getInt(cursor.getColumnIndex("security")));
|
bookmark.getAdvancedSettings().setSecurity(cursor.getInt(cursor.getColumnIndex("security")));
|
||||||
bookmark.getAdvancedSettings().setConsoleMode(cursor.getInt(cursor.getColumnIndex("console_mode")) == 0 ? false : true);
|
bookmark.getAdvancedSettings().setConsoleMode(cursor.getInt(cursor.getColumnIndex("console_mode")) == 0 ? false : true);
|
||||||
bookmark.getAdvancedSettings().setRemoteProgram(cursor.getString(cursor.getColumnIndex("remote_program")));
|
bookmark.getAdvancedSettings().setRemoteProgram(cursor.getString(cursor.getColumnIndex("remote_program")));
|
||||||
|
@ -9,14 +9,20 @@
|
|||||||
|
|
||||||
package com.freerdp.freerdpcore.services;
|
package com.freerdp.freerdpcore.services;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.provider.BaseColumns;
|
import android.provider.BaseColumns;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.database.Cursor;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
import android.database.sqlite.SQLiteOpenHelper;
|
import android.database.sqlite.SQLiteOpenHelper;
|
||||||
|
|
||||||
public class BookmarkDB extends SQLiteOpenHelper
|
public class BookmarkDB extends SQLiteOpenHelper
|
||||||
{
|
{
|
||||||
private static final int DB_VERSION = 1;
|
private static final int DB_VERSION = 2;
|
||||||
private static final String DB_NAME = "bookmarks.db";
|
private static final String DB_NAME = "bookmarks.db";
|
||||||
|
|
||||||
public static final String ID = BaseColumns._ID;
|
public static final String ID = BaseColumns._ID;
|
||||||
@ -52,33 +58,7 @@ public class BookmarkDB extends SQLiteOpenHelper
|
|||||||
|
|
||||||
db.execSQL(sqlPerformanceFlags);
|
db.execSQL(sqlPerformanceFlags);
|
||||||
|
|
||||||
String sqlManualBookmarks =
|
String sqlManualBookmarks = getManualBookmarksCreationString();
|
||||||
"CREATE TABLE 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_3g_settings INTEGER DEFAULT 0, "
|
|
||||||
+ "screen_3g INTEGER NOT NULL, "
|
|
||||||
+ "performance_3g INTEGER NOT NULL, "
|
|
||||||
+ "security INTEGER, "
|
|
||||||
+ "remote_program TEXT, "
|
|
||||||
+ "work_dir TEXT, "
|
|
||||||
+ "console_mode INTEGER, "
|
|
||||||
|
|
||||||
+ "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 + ") "
|
|
||||||
|
|
||||||
+ ");";
|
|
||||||
|
|
||||||
db.execSQL(sqlManualBookmarks);
|
db.execSQL(sqlManualBookmarks);
|
||||||
|
|
||||||
|
|
||||||
@ -120,6 +100,7 @@ public class BookmarkDB extends SQLiteOpenHelper
|
|||||||
+ "performance_flags, "
|
+ "performance_flags, "
|
||||||
+ "screen_3g, "
|
+ "screen_3g, "
|
||||||
+ "performance_3g, "
|
+ "performance_3g, "
|
||||||
|
+ "redirect_sdcard, "
|
||||||
+ "security, "
|
+ "security, "
|
||||||
+ "remote_program, "
|
+ "remote_program, "
|
||||||
+ "work_dir, "
|
+ "work_dir, "
|
||||||
@ -131,12 +112,94 @@ public class BookmarkDB extends SQLiteOpenHelper
|
|||||||
+ "'', "
|
+ "'', "
|
||||||
+ "'', "
|
+ "'', "
|
||||||
+ "3389, "
|
+ "3389, "
|
||||||
+ "1, 1, 2, 2, 0, '', '', 0);";
|
+ "1, 1, 2, 2, 0, 0, '', '', 0);";
|
||||||
db.execSQL(sqlInsertDefaultSessionEntry);
|
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_3g_settings INTEGER DEFAULT 0, "
|
||||||
|
+ "screen_3g INTEGER NOT NULL, "
|
||||||
|
+ "performance_3g INTEGER NOT NULL, "
|
||||||
|
+ "redirect_sdcard INTEGER, "
|
||||||
|
+ "security INTEGER, "
|
||||||
|
+ "remote_program TEXT, "
|
||||||
|
+ "work_dir TEXT, "
|
||||||
|
+ "console_mode INTEGER, "
|
||||||
|
|
||||||
|
+ "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
|
@Override
|
||||||
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
|
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<String> 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<String> GetColumns(SQLiteDatabase db, String tableName) {
|
||||||
|
List<String> ar = null;
|
||||||
|
Cursor c = null;
|
||||||
|
try {
|
||||||
|
c = db.rawQuery("SELECT * FROM " + tableName + " LIMIT 1", null);
|
||||||
|
if (c != null) {
|
||||||
|
ar = new ArrayList<String>(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<String> 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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,8 @@ public class LibFreeRDP
|
|||||||
|
|
||||||
private static native void freerdp_set_data_directory(int inst, String directory);
|
private static native void freerdp_set_data_directory(int inst, String directory);
|
||||||
|
|
||||||
|
private static native void freerdp_set_drive_redirection(int inst, String path);
|
||||||
|
|
||||||
private static native boolean freerdp_update_graphics(int inst,
|
private static native boolean freerdp_update_graphics(int inst,
|
||||||
Bitmap bitmap, int x, int y, int width, int height);
|
Bitmap bitmap, int x, int y, int width, int height);
|
||||||
|
|
||||||
@ -143,6 +145,10 @@ public class LibFreeRDP
|
|||||||
BookmarkBase.AdvancedSettings advancedSettings = bookmark.getAdvancedSettings();
|
BookmarkBase.AdvancedSettings advancedSettings = bookmark.getAdvancedSettings();
|
||||||
freerdp_set_advanced_settings(inst, advancedSettings.getRemoteProgram(), advancedSettings.getWorkDir());
|
freerdp_set_advanced_settings(inst, advancedSettings.getRemoteProgram(), advancedSettings.getWorkDir());
|
||||||
|
|
||||||
|
// drive redirection enabled?
|
||||||
|
if (advancedSettings.getRedirectSDCard())
|
||||||
|
freerdp_set_drive_redirection(inst, android.os.Environment.getExternalStorageDirectory().getPath());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user