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);