diff --git a/client/Android/Studio/freeRDPCore/src/main/AndroidManifest.xml b/client/Android/Studio/freeRDPCore/src/main/AndroidManifest.xml
index 7860018ae..e50a4dc58 100644
--- a/client/Android/Studio/freeRDPCore/src/main/AndroidManifest.xml
+++ b/client/Android/Studio/freeRDPCore/src/main/AndroidManifest.xml
@@ -69,6 +69,12 @@
android:theme="@style/Theme.Main"
android:configChanges="orientation|keyboardHidden|keyboard"
android:windowSoftInputMode="adjustResize">
+
+
+
+
+
+
args = new ArrayList();
+
+ // Parse URI from query string. Same key overwrite previous one
+ // freerdp://user@ip:port/connect?sound=&rfx=&p=password&clipboard=%2b&themes=-
+
+ // Now we only support Software GDI
+ args.add(TAG);
+ args.add("/gdi:sw");
+
+ // Parse hostname and port. Set to 'v' argument
+ String hostname = openUri.getHost();
+ int port = openUri.getPort();
+ if (hostname != null) {
+ hostname = hostname + ((port == -1) ? "" : (":" + String.valueOf(port)));
+ args.add("/v:" + hostname);
+ }
+
+ String user = openUri.getUserInfo();
+ if (user != null) {
+ args.add("/u:" + user);
+ }
+
+ for (String key: openUri.getQueryParameterNames()) {
+ String value = openUri.getQueryParameter(key);
+
+ if (value.isEmpty()) {
+ // Query: key=
+ // To freerdp argument: /key
+ args.add("/" + key);
+ } else if (value.equals("-") || value.equals("+")) {
+ // Query: key=- or key=+
+ // To freerdp argument: -key or +key
+ args.add(value+key);
+ } else {
+ // Query: key=value
+ // To freerdp argument: /key:value
+ if (key.equals("drive") && value.equals("sdcard")) {
+ // Special for sdcard redirect
+ String path = android.os.Environment.getExternalStorageDirectory().getPath();
+ value = "sdcard," + path;
+ }
+
+ args.add("/" + key + ":" + value);
+ }
+ }
+
+ 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);