62 implements LibFreeRDP.UIEventListener, ClipboardManagerProxy.OnClipboardChangedListener
64 public static final String PARAM_CONNECTION_REFERENCE =
"conRef";
65 public static final String PARAM_INSTANCE =
"instance";
66 private static final String TAG =
"FreeRDP.SessionActivity";
68 private Bitmap bitmap;
69 private SessionState session;
73 private static final int REFRESH_SESSIONVIEW = 1;
74 private static final int DISPLAY_TOAST = 2;
75 private static final int GRAPHICS_CHANGED = 6;
76 private static final int POINTER_SET = 7;
77 private static final int REQUEST_MEDIA_PERMISSIONS = 100;
79 private RailWindowManager railManager;
81 private final Handler uiHandler =
new Handler(Looper.getMainLooper()) {
82 @Override
public void handleMessage(Message msg)
86 case GRAPHICS_CHANGED:
88 sessionView.onSurfaceChange(session);
89 scrollView.requestLayout();
92 case REFRESH_SESSIONVIEW:
94 sessionView.invalidateRegion();
99 Toast errorToast = Toast.makeText(getApplicationContext(), msg.obj.toString(),
106 Bundle data = msg.getData();
107 if (data !=
null && data.containsKey(
"pixels"))
109 int[] pixels = data.getIntArray(
"pixels");
110 int width = data.getInt(
"width");
111 int height = data.getInt(
"height");
112 int hotX = data.getInt(
"hotX");
113 int hotY = data.getInt(
"hotY");
114 sessionView.setRemoteCursor(pixels, width, height, hotX, hotY);
115 if (touchPointerView !=
null)
116 touchPointerView.setRemoteCursor(pixels, width, height, hotX, hotY);
120 sessionView.setRemoteCursor(
null, 0, 0, 0, 0);
121 if (touchPointerView !=
null)
122 touchPointerView.setRemoteCursor(
null, 0, 0, 0, 0);
130 private int screen_width;
131 private int screen_height;
133 private BookmarkBase pendingConnectBookmark =
null;
134 private boolean connectCancelledByUser =
false;
135 private boolean sessionRunning =
false;
136 private long backPressedTime = 0;
140 private ClipboardManagerProxy mClipboardManager;
146 private void hideSystemBars()
151 WindowCompat.setDecorFitsSystemWindows(getWindow(),
false);
153 if (getSupportActionBar() !=
null)
154 getSupportActionBar().hide();
156 WindowInsetsControllerCompat controller =
157 WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView());
158 controller.setAppearanceLightStatusBars(
false);
159 controller.setAppearanceLightNavigationBars(
false);
161 getWindow().setStatusBarColor(android.graphics.Color.TRANSPARENT);
162 getWindow().setNavigationBarColor(android.graphics.Color.TRANSPARENT);
163 getWindow().setNavigationBarContrastEnforced(
false);
165 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
169 toHide |= WindowInsetsCompat.Type.statusBars();
171 toHide |= WindowInsetsCompat.Type.navigationBars();
175 controller.hide(toHide);
176 controller.setSystemBarsBehavior(
177 WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
181 controller.show(WindowInsetsCompat.Type.systemBars());
187 int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
188 View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
190 flags |= View.SYSTEM_UI_FLAG_FULLSCREEN;
192 flags |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
193 if ((flags & (View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)) !=
195 flags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
197 getWindow().getDecorView().setSystemUiVisibility(flags);
200 WindowManager.LayoutParams lp = getWindow().getAttributes();
201 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
202 lp.layoutInDisplayCutoutMode =
203 WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
205 lp.layoutInDisplayCutoutMode =
206 WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
207 getWindow().setAttributes(lp);
210 @Override
public void onCreate(Bundle savedInstanceState)
212 super.onCreate(savedInstanceState);
216 this.setContentView(R.layout.session);
218 Log.v(TAG,
"Session.onCreate");
227 final View activityRootView = findViewById(R.id.session_root_view);
228 activityRootView.setFitsSystemWindows(
false);
229 ViewCompat.setOnApplyWindowInsetsListener(activityRootView,
230 (v, insets) -> onWindowInsetsChanged(v, insets));
231 activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(
232 new OnGlobalLayoutListener() {
233 @Override
public void onGlobalLayout()
235 screen_width = scrollView.getWidth() - scrollView.getPaddingLeft() -
236 scrollView.getPaddingRight();
237 screen_height = scrollView.getHeight() - scrollView.getPaddingTop() -
238 scrollView.getPaddingBottom();
241 if (!sessionRunning && getIntent() !=
null)
243 processIntent(getIntent());
244 sessionRunning =
true;
249 sessionView = findViewById(R.id.sessionView);
250 sessionView.requestFocus();
252 touchPointerView = findViewById(R.id.touchPointerView);
255 @Override public void onToggleTouchPointer()
257 if (inputManager != null)
258 inputManager.toggleTouchPointer();
260 @Override
public void onToggleSysKeyboard()
262 if (inputManager !=
null)
263 inputManager.toggleSystemKeyboard();
265 @Override
public void onToggleExtKeyboard()
267 if (inputManager !=
null)
268 inputManager.toggleExtendedKeyboard();
272 KeyboardView keyboardView = findViewById(R.id.extended_keyboard);
273 KeyboardView modifiersKeyboardView = findViewById(R.id.extended_keyboard_header);
275 scrollView = findViewById(R.id.sessionScrollView);
276 scrollView.setScrollViewListener(
null);
277 railManager =
new RailWindowManager(
this, findViewById(R.id.railContainer), sessionView);
279 sessionViewModel.getState().observe(
this, this::onConnectionStateChanged);
282 @Override public void onUserCancel()
284 connectCancelledByUser = true;
290 keyboardView, modifiersKeyboardView);
291 sessionView.setSessionViewListener(inputManager);
292 touchPointerView.setTouchPointerListener(inputManager);
293 sessionView.setScaleGestureDetector(
294 new ScaleGestureDetector(
this, inputManager.getPinchZoomListener()));
296 mClipboardManager = ClipboardManagerProxy.getClipboardManager(
this);
297 mClipboardManager.addClipboardChangedListener(
this);
299 getOnBackPressedDispatcher().addCallback(
this,
new OnBackPressedCallback(
true) {
300 @Override
public void handleOnBackPressed()
309 @Override
public void onWindowFocusChanged(
boolean hasFocus)
311 super.onWindowFocusChanged(hasFocus);
315 mClipboardManager.getPrimaryClipManually();
319 @Override
protected void onStart()
322 Log.v(TAG,
"Session.onStart");
325 @Override
protected void onRestart()
328 Log.v(TAG,
"Session.onRestart");
331 @Override
protected void onResume()
334 Log.v(TAG,
"Session.onResume");
335 activeSession =
this;
338 @Override
protected void onPause()
341 Log.v(TAG,
"Session.onPause");
342 if (activeSession ==
this)
343 activeSession =
null;
345 inputManager.hideKeyboards();
348 @Override
protected void onStop()
351 Log.v(TAG,
"Session.onStop");
354 @Override
protected void onDestroy()
356 if (connectThread !=
null)
358 connectThread.interrupt();
361 Log.v(TAG,
"Session.onDestroy");
364 GlobalApp.cancelDisconnectTimer();
368 LibFreeRDP.disconnect(session.getInstance());
371 sessionViewModel.unregister();
374 mClipboardManager.removeClipboardboardChangedListener(
this);
377 GlobalApp.freeSession(session.getInstance());
382 @Override
public void onConfigurationChanged(Configuration newConfig)
384 super.onConfigurationChanged(newConfig);
387 inputManager.reloadKeyboards();
392 if (session !=
null && session.getBookmark() !=
null &&
393 session.getBookmark().getActiveScreenSettings().isFitScreen())
395 scrollView.post(() -> {
396 if (screen_width > 0 && screen_height > 0)
397 LibFreeRDP.sendMonitorLayout(session.getInstance(), screen_width,
403 private WindowInsetsCompat onWindowInsetsChanged(View rootView, WindowInsetsCompat windowInsets)
405 boolean fitSafeArea = ApplicationSettingsActivity.getFitRoundedCorners(
this);
406 boolean hideStatusBar = ApplicationSettingsActivity.getHideStatusBar(
this);
407 boolean hideNavBar = ApplicationSettingsActivity.getHideNavigationBar(
this);
409 int insetsTop = windowInsets
410 .getInsets(WindowInsetsCompat.Type.statusBars() |
411 WindowInsetsCompat.Type.displayCutout())
413 rootView.setPadding(0, hideStatusBar ? 0 : insetsTop, 0, 0);
414 Insets navInsets = hideNavBar
416 : windowInsets.getInsets(WindowInsetsCompat.Type.navigationBars());
417 if (floatingToolbar !=
null)
418 floatingToolbar.setInsets(navInsets.left, hideStatusBar ? 0 : insetsTop,
419 navInsets.right, navInsets.bottom);
421 int safeLeft = 0, safeTop = 0, safeRight = 0, safeBottom = 0;
422 if (fitSafeArea && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
424 WindowInsets platformInsets = windowInsets.toWindowInsets();
425 if (platformInsets !=
null)
427 boolean landscape = getResources().getConfiguration().orientation ==
428 Configuration.ORIENTATION_LANDSCAPE;
430 int radTL = cornerRadius(platformInsets, RoundedCorner.POSITION_TOP_LEFT);
431 int radBL = cornerRadius(platformInsets, RoundedCorner.POSITION_BOTTOM_LEFT);
432 int radTR = cornerRadius(platformInsets, RoundedCorner.POSITION_TOP_RIGHT);
433 int radBR = cornerRadius(platformInsets, RoundedCorner.POSITION_BOTTOM_RIGHT);
437 safeLeft = Math.max(0, Math.max(radTL, radBL) - rootView.getPaddingLeft());
438 safeRight = Math.max(0, Math.max(radTR, radBR) - rootView.getPaddingRight());
442 safeTop = Math.max(0, Math.max(radTL, radTR) - rootView.getPaddingTop());
443 safeBottom = Math.max(0, Math.max(radBL, radBR) - rootView.getPaddingBottom());
448 scrollView.setPadding(Math.max(safeLeft, navInsets.left), safeTop,
449 Math.max(safeRight, navInsets.right),
450 Math.max(safeBottom, navInsets.bottom));
451 if (inputManager !=
null)
452 inputManager.setSafeInsets(safeLeft, safeTop);
454 return WindowInsetsCompat.CONSUMED;
457 @RequiresApi(Build.VERSION_CODES.S)
458 private static
int cornerRadius(WindowInsets insets,
int position)
460 RoundedCorner corner = insets.getRoundedCorner(position);
461 return (corner !=
null) ? corner.getRadius() : 0;
464 private void processIntent(Intent intent)
467 Bundle bundle = intent.getExtras();
468 Uri openUri = intent.getData();
475 else if (bundle.containsKey(PARAM_INSTANCE))
477 int inst = bundle.getInt(PARAM_INSTANCE);
478 session = GlobalApp.getSession(inst);
479 bitmap = session.getSurface().getBitmap();
482 else if (bundle.containsKey(PARAM_CONNECTION_REFERENCE))
484 String refStr = bundle.getString(PARAM_CONNECTION_REFERENCE);
485 if (ConnectionReference.isHostnameReference(refStr))
487 BookmarkBase bookmark =
new BookmarkBase();
488 bookmark.setHostname(ConnectionReference.getHostname(refStr));
491 else if (ConnectionReference.isBookmarkReference(refStr))
493 sessionViewModel.loadBookmarkById(ConnectionReference.getBookmarkId(refStr),
495 if (bookmark != null)
498 closeSessionActivity(RESULT_CANCELED);
503 closeSessionActivity(RESULT_CANCELED);
509 closeSessionActivity(RESULT_CANCELED);
513 private void connect(BookmarkBase bookmark)
515 session = GlobalApp.createSession(bookmark, getApplicationContext());
517 BookmarkBase.ScreenSettings screenSettings =
518 session.getBookmark().getActiveScreenSettings();
519 Log.v(TAG,
"Screen Resolution: " + screenSettings.getResolutionString());
520 if (screenSettings.isAutomatic())
524 screenSettings.setHeight(screen_height);
525 screenSettings.setWidth(screen_width);
527 if (screenSettings.isFitScreen())
529 screenSettings.setHeight(screen_height);
530 screenSettings.setWidth(screen_width);
534 java.util.ArrayList<String> needed =
new java.util.ArrayList<>();
535 if (bookmark.getAdvancedSettings().getRedirectMicrophone() &&
536 checkSelfPermission(Manifest.permission.RECORD_AUDIO) !=
537 PackageManager.PERMISSION_GRANTED)
538 needed.add(Manifest.permission.RECORD_AUDIO);
539 if (bookmark.getAdvancedSettings().getRedirectCamera() &&
540 checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
541 needed.add(Manifest.permission.CAMERA);
543 if (!needed.isEmpty())
545 pendingConnectBookmark = bookmark;
546 requestPermissions(needed.toArray(
new String[0]), REQUEST_MEDIA_PERMISSIONS);
550 connectWithTitle(bookmark.getLabel());
554 public void onRequestPermissionsResult(
int requestCode, @NonNull String[] permissions,
555 @NonNull
int[] grantResults)
557 super.onRequestPermissionsResult(requestCode, permissions, grantResults);
558 if (requestCode == REQUEST_MEDIA_PERMISSIONS && pendingConnectBookmark !=
null)
560 BookmarkBase bookmark = pendingConnectBookmark;
561 pendingConnectBookmark =
null;
562 connectWithTitle(bookmark.getLabel());
566 private void connect(Uri openUri)
568 session = GlobalApp.createSession(openUri, getApplicationContext());
570 connectWithTitle(openUri.getAuthority());
573 static class ConnectThread
extends Thread
575 private final SessionState runnableSession;
576 private final Context context;
578 public ConnectThread(@NonNull Context context, @NonNull SessionState session)
580 this.context = context;
581 runnableSession = session;
586 runnableSession.connect(context.getApplicationContext());
590 private ConnectThread connectThread =
null;
592 private void connectWithTitle(String title)
594 session.setUIEventListener(
this);
596 sessionViewModel.register(session.getInstance());
598 dialogs.showProgress(title, () -> {
599 connectCancelledByUser =
true;
600 LibFreeRDP.cancelConnection(session.getInstance());
603 connectThread =
new ConnectThread(getApplicationContext(), session);
604 connectThread.start();
609 private void bindSession()
611 Log.v(TAG,
"bindSession called");
612 session.setUIEventListener(
this);
613 sessionView.onSurfaceChange(session);
614 scrollView.requestLayout();
616 Bitmap surface = session.getSurface() !=
null ? session.getSurface().getBitmap() :
null;
617 inputManager.attachSession(session.getInstance(), surface);
618 inputManager.setScreenSize(screen_width, screen_height);
620 View rootView = findViewById(R.id.session_root_view);
621 if (rootView !=
null)
622 ViewCompat.requestApplyInsets(rootView);
625 private void closeSessionActivity(
int resultCode)
628 setResult(resultCode, getIntent());
632 public void handleBackPressed()
635 if (inputManager.isAnyKeyboardVisible())
637 inputManager.hideKeyboards();
640 if (inputManager.handleBackAsAltF4())
644 if (System.currentTimeMillis() - backPressedTime < 2000)
646 connectCancelledByUser =
true;
647 LibFreeRDP.disconnect(session.getInstance());
651 backPressedTime = System.currentTimeMillis();
652 Toast.makeText(
this, R.string.session_double_back_to_exit, Toast.LENGTH_SHORT).show();
656 @Override
public boolean onKeyLongPress(
int keyCode, KeyEvent event)
658 if (inputManager.onAndroidKeyLongPress(keyCode))
660 return super.onKeyLongPress(keyCode, event);
663 boolean handleKeyEvent(KeyEvent event)
665 return inputManager !=
null && inputManager.onAndroidKeyEvent(event);
674 @Override
public boolean onKeyDown(
int keycode, KeyEvent event)
676 if (keycode == KeyEvent.KEYCODE_BACK)
677 return super.onKeyDown(keycode, event);
678 return inputManager.onAndroidKeyEvent(event);
681 @Override
public boolean onKeyUp(
int keycode, KeyEvent event)
683 if (keycode == KeyEvent.KEYCODE_BACK)
684 return super.onKeyUp(keycode, event);
685 return inputManager.onAndroidKeyEvent(event);
690 @Override
public boolean onKeyMultiple(
int keyCode,
int repeatCount, KeyEvent event)
692 return inputManager.onAndroidKeyEvent(event);
700 @Override
public void OnSettingsChanged(
int width,
int height,
int bpp)
704 bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
706 bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
708 session.setSurface(
new BitmapDrawable(getResources(), bitmap));
710 if (inputManager !=
null)
711 inputManager.setBitmap(bitmap);
713 if (session.getBookmark() ==
null)
723 BookmarkBase.ScreenSettings settings = session.getBookmark().getActiveScreenSettings();
724 if ((settings.getWidth() != width && settings.getWidth() != width + 1) ||
725 settings.getHeight() != height || settings.getColors() != bpp)
726 uiHandler.sendMessage(Message.obtain(
727 null, DISPLAY_TOAST, getResources().getText(R.string.info_capabilities_changed)));
730 @Override
public void OnGraphicsUpdate(
int x,
int y,
int width,
int height)
732 LibFreeRDP.updateGraphics(session.getInstance(), bitmap, x, y, width, height);
734 sessionView.addInvalidRegion(
new Rect(x, y, x + width, y + height));
741 uiHandler.sendEmptyMessage(REFRESH_SESSIONVIEW);
744 @Override
public void OnGraphicsResize(
int width,
int height,
int bpp)
748 bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
750 bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
751 session.setSurface(
new BitmapDrawable(getResources(), bitmap));
753 if (inputManager !=
null)
754 inputManager.setBitmap(bitmap);
760 uiHandler.sendEmptyMessage(GRAPHICS_CHANGED);
764 public boolean OnAuthenticate(StringBuilder username, StringBuilder domain,
765 StringBuilder password)
771 public boolean OnGatewayAuthenticate(StringBuilder username, StringBuilder domain,
772 StringBuilder password)
774 return dialogs.promptCredentials(username, domain, password);
778 public int OnVerifiyCertificateEx(String host,
long port, String commonName, String subject,
779 String issuer, String fingerprint,
long flags)
781 if (ApplicationSettingsActivity.getAcceptAllCertificates(
this))
783 return dialogs.verifyCertificate(host, port, subject, issuer, fingerprint, flags);
787 public int OnVerifyChangedCertificateEx(String host,
long port, String commonName,
788 String subject, String issuer, String fingerprint,
789 String oldSubject, String oldIssuer,
790 String oldFingerprint,
long flags)
792 if (ApplicationSettingsActivity.getAcceptAllCertificates(
this))
794 return dialogs.verifyChangedCertificate(host, port, subject, issuer, fingerprint, flags);
797 @Override
public boolean OnExperimentalFeature(
int feature)
799 final String featureKey;
800 final String displayName;
803 case LibFreeRDP.EXPERIMENTAL_REMOTEAPP:
804 featureKey =
"remoteapp";
805 displayName = getString(R.string.experimental_feature_remoteapp);
807 case LibFreeRDP.EXPERIMENTAL_CAMERA:
808 featureKey =
"camera";
809 displayName = getString(R.string.experimental_feature_camera);
814 if (ApplicationSettingsActivity.isExperimentalEnabled(
this, featureKey))
817 connectCancelledByUser =
true;
818 dialogs.showExperimentalBlocked(displayName);
822 @Override
public void OnRemoteClipboardChanged(String data)
824 Log.v(TAG,
"OnRemoteClipboardChanged: " + data);
825 mClipboardManager.setClipboardData(data);
828 @Override
public void OnRemoteClipboardImageChanged(
byte[] data)
830 Log.v(TAG,
"OnRemoteClipboardImageChanged: " + data.length +
" bytes");
831 mClipboardManager.setClipboardImage(data);
834 @Override
public void OnPointerSet(
int[] pixels,
int width,
int height,
int hotX,
int hotY)
836 Bundle data =
new Bundle();
837 data.putIntArray(
"pixels", pixels);
838 data.putInt(
"width", width);
839 data.putInt(
"height", height);
840 data.putInt(
"hotX", hotX);
841 data.putInt(
"hotY", hotY);
842 Message msg = uiHandler.obtainMessage(POINTER_SET);
844 uiHandler.sendMessage(msg);
847 @Override
public void OnPointerSetNull()
849 uiHandler.sendEmptyMessage(POINTER_SET);
852 @Override
public void OnPointerSetDefault()
854 sessionView.setDefaultCursor();
857 @Override
public void OnRailWindowUpdate(
long windowId,
int width,
int height,
int[] pixels)
859 railManager.onWindowUpdate(windowId, width, height, pixels);
862 @Override
public void OnRailWindowMove(
long windowId,
int x,
int y,
int w,
int h)
864 railManager.onWindowMove(windowId, x, y, w, h);
867 @Override
public void OnRailWindowHide(
long windowId)
869 railManager.onWindowHide(windowId);
872 @Override
public void OnRailWindowDestroy(
long windowId)
874 railManager.onWindowDestroy(windowId);
877 @Override
public void OnRailSessionEnd()
879 railManager.onSessionEnd();
882 @Override
public void OnRailMonitoredDesktop(
long[] windowIds,
long activeWindowId)
884 railManager.onMonitoredDesktop(windowIds, activeWindowId);
891 @Override
public boolean onGenericMotionEvent(MotionEvent e)
893 super.onGenericMotionEvent(e);
894 return inputManager !=
null && inputManager.onGenericMotionEvent(e);
899 @Override
public void onClipboardChanged(String data)
901 Log.v(TAG,
"onClipboardChanged: " + data);
903 LibFreeRDP.sendClipboardData(session.getInstance(), data);
906 @Override
public void onClipboardImageChanged(
byte[] data, String mimeType)
908 if (session !=
null && data !=
null)
909 LibFreeRDP.sendClipboardImageData(session.getInstance(), data, mimeType);
912 private void onConnectionStateChanged(SessionViewModel.ConnectionState state)
919 onSessionConnected();
925 onSessionDisconnected();
932 private void onSessionConnected()
934 Log.v(TAG,
"onSessionConnected");
936 if (connectCancelledByUser)
938 LibFreeRDP.disconnect(session.getInstance());
939 closeSessionActivity(RESULT_CANCELED);
946 if (ApplicationSettingsActivity.getKeepScreenOnWhenConnected(
this))
948 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
951 dialogs.dismissProgress();
953 if (session.getBookmark() ==
null)
960 Bundle bundle = getIntent().getExtras();
961 if (bundle !=
null && bundle.containsKey(PARAM_CONNECTION_REFERENCE))
963 if (ConnectionReference.isHostnameReference(
964 bundle.getString(PARAM_CONNECTION_REFERENCE)))
966 assert session.getBookmark().getType() == BookmarkBase.TYPE_MANUAL;
967 sessionViewModel.recordQuickConnectHistory(session.getBookmark().getHostname());
972 private void onSessionFailed()
974 Log.v(TAG,
"onSessionFailed");
977 if (inputManager !=
null)
978 inputManager.cancelPendingEvents();
983 if (!connectCancelledByUser)
984 uiHandler.sendMessage(Message.obtain(
985 null, DISPLAY_TOAST, getResources().getText(R.string.error_connection_failure)));
987 closeSessionActivity(RESULT_CANCELED);
990 private void onSessionDisconnected()
992 Log.v(TAG,
"onSessionDisconnected");
995 if (inputManager !=
null)
996 inputManager.cancelPendingEvents();
998 if (ApplicationSettingsActivity.getKeepScreenOnWhenConnected(
this))
1000 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
1005 railManager.clear();
1007 session.setUIEventListener(
null);
1008 closeSessionActivity(RESULT_OK);