237 {
238 BookmarkBase.ScreenSettings screenSettings = bookmark.getActiveScreenSettings();
239 BookmarkBase.AdvancedSettings advanced = bookmark.getAdvancedSettings();
240 BookmarkBase.DebugSettings debug = bookmark.getDebugSettings();
241
242 String arg;
243 ArrayList<String> args = new ArrayList<>();
244
245 args.add(TAG);
246 args.add("/gdi:sw");
247
248 final String clientName = ApplicationSettingsActivity.getClientName(context);
249 if (!clientName.isEmpty())
250 {
251 args.add("/client-hostname:" + clientName);
252 }
253 String certName = "";
254 if (bookmark.getType() != BookmarkBase.TYPE_MANUAL)
255 {
256 return false;
257 }
258
259 int port = bookmark.<ManualBookmark>get().getPort();
260 String hostname = bookmark.<ManualBookmark>get().getHostname();
261
262 args.add("/v:" + hostname);
263 args.add("/port:" + port);
264
265 arg = bookmark.getUsername();
266 if (!arg.isEmpty())
267 {
268 args.add("/u:" + arg);
269 }
270 arg = bookmark.getDomain();
271 if (!arg.isEmpty())
272 {
273 args.add("/d:" + arg);
274 }
275 arg = bookmark.getPassword();
276 if (!arg.isEmpty())
277 {
278 args.add("/p:" + arg);
279 }
280
281 args.add(
282 String.format("/size:%dx%d", screenSettings.getWidth(), screenSettings.getHeight()));
283 args.add("/bpp:" + screenSettings.getColors());
284
285 if (advanced.getConsoleMode())
286 {
287 args.add("/admin");
288 }
289
290 switch (advanced.getSecurity())
291 {
292 case 3:
293 args.add("/sec:nla");
294 break;
295 case 2:
296 args.add("/sec:tls");
297 break;
298 case 1:
299 args.add("/sec:rdp");
300 break;
301 default:
302 break;
303 }
304
305 if (!certName.isEmpty())
306 {
307 args.add("/cert-name:" + certName);
308 }
309
310 BookmarkBase.PerformanceFlags flags = bookmark.getActivePerformanceFlags();
311 if (flags.getRemoteFX())
312 {
313 args.add("/rfx");
314 args.add("/network:auto");
315 }
316
317 if (flags.getGfx())
318 {
319 args.add("/gfx");
320 args.add("/network:auto");
321 }
322
323 if (flags.getH264() && mHasH264)
324 {
325 args.add("/gfx:AVC444");
326 args.add("/network:auto");
327 }
328
329 args.add(addFlag("wallpaper", flags.getWallpaper()));
330 args.add(addFlag("window-drag", flags.getFullWindowDrag()));
331 args.add(addFlag("menu-anims", flags.getMenuAnimations()));
332 args.add(addFlag("themes", flags.getTheming()));
333 args.add(addFlag("fonts", flags.getFontSmoothing()));
334 args.add(addFlag("aero", flags.getDesktopComposition()));
335
336 if (!advanced.getRemoteProgram().isEmpty())
337 {
338 args.add("/shell:" + advanced.getRemoteProgram());
339 }
340
341 if (!advanced.getWorkDir().isEmpty())
342 {
343 args.add("/shell-dir:" + advanced.getWorkDir());
344 }
345
346 args.add(addFlag("async-channels", debug.getAsyncChannel()));
347 args.add(addFlag("async-update", debug.getAsyncUpdate()));
348
349 if (advanced.getRedirectSDCard())
350 {
351 String path = android.os.Environment.getExternalStorageDirectory().getPath();
352 args.add("/drive:sdcard," + path);
353 }
354
355 args.add("/clipboard");
356
357
358 if (bookmark.getType() == BookmarkBase.TYPE_MANUAL &&
359 bookmark.<ManualBookmark>get().getEnableGatewaySettings())
360 {
361 ManualBookmark.GatewaySettings gateway =
362 bookmark.<ManualBookmark>get().getGatewaySettings();
363
364 String carg =
365 String.format("/gateway:g:%s:%d", gateway.getHostname(), gateway.getPort());
366
367 arg = gateway.getUsername();
368 if (!arg.isEmpty())
369 {
370 carg.append(",u:" + arg);
371 }
372 arg = gateway.getDomain();
373 if (!arg.isEmpty())
374 {
375 carg.append(",d:" + arg);
376 }
377 arg = gateway.getPassword();
378 if (!arg.isEmpty())
379 {
380 cargs.append(",p:" + arg);
381 }
382 args.add(String.format("/gateway:g:%s:%d", gateway.getHostname(), gateway.getPort()));
383 }
384
385
386
387
388 args.add("/audio-mode:" + advanced.getRedirectSound());
389 if (advanced.getRedirectSound() == 0)
390 {
391 args.add("/sound");
392 }
393
394 if (advanced.getRedirectMicrophone())
395 {
396 args.add("/microphone");
397 }
398
399 args.add("/kbd:unicode:on");
400 args.add("/cert:ignore");
401 args.add("/log-level:" + debug.getDebugLevel());
402 String[] arrayArgs = args.toArray(new String[0]);
403 return freerdp_parse_arguments(inst, arrayArgs);
404 }