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);
118 sessionView.setRemoteCursor(
null, 0, 0, 0, 0);
126 private int screen_width;
127 private int screen_height;
129 private BookmarkBase pendingConnectBookmark =
null;
130 private boolean connectCancelledByUser =
false;
131 private boolean sessionRunning =
false;
132 private long backPressedTime = 0;
136 private ClipboardManagerProxy mClipboardManager;
142 private void hideSystemBars()
147 WindowCompat.setDecorFitsSystemWindows(getWindow(),
false);
149 if (getSupportActionBar() !=
null)
150 getSupportActionBar().hide();
152 WindowInsetsControllerCompat controller =
153 WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView());
154 controller.setAppearanceLightStatusBars(
false);
155 controller.setAppearanceLightNavigationBars(
false);
157 getWindow().setStatusBarColor(android.graphics.Color.TRANSPARENT);
158 getWindow().setNavigationBarColor(android.graphics.Color.TRANSPARENT);
159 getWindow().setNavigationBarContrastEnforced(
false);
161 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
165 toHide |= WindowInsetsCompat.Type.statusBars();
167 toHide |= WindowInsetsCompat.Type.navigationBars();
171 controller.hide(toHide);
172 controller.setSystemBarsBehavior(
173 WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
177 controller.show(WindowInsetsCompat.Type.systemBars());
183 int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
184 View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
186 flags |= View.SYSTEM_UI_FLAG_FULLSCREEN;
188 flags |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
189 if ((flags & (View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)) !=
191 flags |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
193 getWindow().getDecorView().setSystemUiVisibility(flags);
196 WindowManager.LayoutParams lp = getWindow().getAttributes();
197 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R)
198 lp.layoutInDisplayCutoutMode =
199 WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
201 lp.layoutInDisplayCutoutMode =
202 WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
203 getWindow().setAttributes(lp);
206 @Override
public void onCreate(Bundle savedInstanceState)
208 super.onCreate(savedInstanceState);
212 this.setContentView(R.layout.session);
214 Log.v(TAG,
"Session.onCreate");
223 final View activityRootView = findViewById(R.id.session_root_view);
224 activityRootView.setFitsSystemWindows(
false);
225 ViewCompat.setOnApplyWindowInsetsListener(activityRootView,
226 (v, insets) -> onWindowInsetsChanged(v, insets));
227 activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(
228 new OnGlobalLayoutListener() {
229 @Override
public void onGlobalLayout()
231 screen_width = scrollView.getWidth() - scrollView.getPaddingLeft() -
232 scrollView.getPaddingRight();
233 screen_height = scrollView.getHeight() - scrollView.getPaddingTop() -
234 scrollView.getPaddingBottom();
237 if (!sessionRunning && getIntent() !=
null)
239 processIntent(getIntent());
240 sessionRunning =
true;
245 sessionView = findViewById(R.id.sessionView);
246 sessionView.requestFocus();
248 touchPointerView = findViewById(R.id.touchPointerView);
251 @Override public void onToggleTouchPointer()
253 if (inputManager != null)
254 inputManager.toggleTouchPointer();
256 @Override
public void onToggleSysKeyboard()
258 if (inputManager !=
null)
259 inputManager.toggleSystemKeyboard();
261 @Override
public void onToggleExtKeyboard()
263 if (inputManager !=
null)
264 inputManager.toggleExtendedKeyboard();
268 KeyboardView keyboardView = findViewById(R.id.extended_keyboard);
269 KeyboardView modifiersKeyboardView = findViewById(R.id.extended_keyboard_header);
271 scrollView = findViewById(R.id.sessionScrollView);
272 scrollView.setScrollViewListener(
null);
273 railManager =
new RailWindowManager(
this, findViewById(R.id.railContainer), sessionView);
275 sessionViewModel.getState().observe(
this, this::onConnectionStateChanged);
278 @Override public void onUserCancel()
280 connectCancelledByUser = true;
286 keyboardView, modifiersKeyboardView);
287 sessionView.setSessionViewListener(inputManager);
288 touchPointerView.setTouchPointerListener(inputManager);
289 sessionView.setScaleGestureDetector(
290 new ScaleGestureDetector(
this, inputManager.getPinchZoomListener()));
292 mClipboardManager = ClipboardManagerProxy.getClipboardManager(
this);
293 mClipboardManager.addClipboardChangedListener(
this);
295 getOnBackPressedDispatcher().addCallback(
this,
new OnBackPressedCallback(
true) {
296 @Override
public void handleOnBackPressed()
305 @Override
public void onWindowFocusChanged(
boolean hasFocus)
307 super.onWindowFocusChanged(hasFocus);
311 mClipboardManager.getPrimaryClipManually();
315 @Override
protected void onStart()
318 Log.v(TAG,
"Session.onStart");
321 @Override
protected void onRestart()
324 Log.v(TAG,
"Session.onRestart");
327 @Override
protected void onResume()
330 Log.v(TAG,
"Session.onResume");
331 activeSession =
this;
334 @Override
protected void onPause()
337 Log.v(TAG,
"Session.onPause");
338 if (activeSession ==
this)
339 activeSession =
null;
341 inputManager.hideKeyboards();
344 @Override
protected void onStop()
347 Log.v(TAG,
"Session.onStop");
350 @Override
protected void onDestroy()
352 if (connectThread !=
null)
354 connectThread.interrupt();
357 Log.v(TAG,
"Session.onDestroy");
360 GlobalApp.cancelDisconnectTimer();
364 LibFreeRDP.disconnect(session.getInstance());
367 sessionViewModel.unregister();
370 mClipboardManager.removeClipboardboardChangedListener(
this);
373 GlobalApp.freeSession(session.getInstance());
378 @Override
public void onConfigurationChanged(Configuration newConfig)
380 super.onConfigurationChanged(newConfig);
383 inputManager.reloadKeyboards();
388 if (session !=
null && session.getBookmark() !=
null &&
389 session.getBookmark().getActiveScreenSettings().isFitScreen())
391 scrollView.post(() -> {
392 if (screen_width > 0 && screen_height > 0)
393 LibFreeRDP.sendMonitorLayout(session.getInstance(), screen_width,
399 private WindowInsetsCompat onWindowInsetsChanged(View rootView, WindowInsetsCompat windowInsets)
401 boolean fitSafeArea = ApplicationSettingsActivity.getFitRoundedCorners(
this);
402 boolean hideStatusBar = ApplicationSettingsActivity.getHideStatusBar(
this);
403 boolean hideNavBar = ApplicationSettingsActivity.getHideNavigationBar(
this);
405 int insetsTop = windowInsets
406 .getInsets(WindowInsetsCompat.Type.statusBars() |
407 WindowInsetsCompat.Type.displayCutout())
409 rootView.setPadding(0, hideStatusBar ? 0 : insetsTop, 0, 0);
410 Insets navInsets = hideNavBar
412 : windowInsets.getInsets(WindowInsetsCompat.Type.navigationBars());
413 if (floatingToolbar !=
null)
414 floatingToolbar.setInsets(navInsets.left, hideStatusBar ? 0 : insetsTop,
415 navInsets.right, navInsets.bottom);
417 int safeLeft = 0, safeTop = 0, safeRight = 0, safeBottom = 0;
418 if (fitSafeArea && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
420 WindowInsets platformInsets = windowInsets.toWindowInsets();
421 if (platformInsets !=
null)
423 boolean landscape = getResources().getConfiguration().orientation ==
424 Configuration.ORIENTATION_LANDSCAPE;
426 int radTL = cornerRadius(platformInsets, RoundedCorner.POSITION_TOP_LEFT);
427 int radBL = cornerRadius(platformInsets, RoundedCorner.POSITION_BOTTOM_LEFT);
428 int radTR = cornerRadius(platformInsets, RoundedCorner.POSITION_TOP_RIGHT);
429 int radBR = cornerRadius(platformInsets, RoundedCorner.POSITION_BOTTOM_RIGHT);
433 safeLeft = Math.max(0, Math.max(radTL, radBL) - rootView.getPaddingLeft());
434 safeRight = Math.max(0, Math.max(radTR, radBR) - rootView.getPaddingRight());
438 safeTop = Math.max(0, Math.max(radTL, radTR) - rootView.getPaddingTop());
439 safeBottom = Math.max(0, Math.max(radBL, radBR) - rootView.getPaddingBottom());
444 scrollView.setPadding(Math.max(safeLeft, navInsets.left), safeTop,
445 Math.max(safeRight, navInsets.right),
446 Math.max(safeBottom, navInsets.bottom));
447 if (inputManager !=
null)
448 inputManager.setSafeInsets(safeLeft, safeTop);
450 return WindowInsetsCompat.CONSUMED;
453 @RequiresApi(Build.VERSION_CODES.S)
454 private static
int cornerRadius(WindowInsets insets,
int position)
456 RoundedCorner corner = insets.getRoundedCorner(position);
457 return (corner !=
null) ? corner.getRadius() : 0;
460 private void processIntent(Intent intent)
463 Bundle bundle = intent.getExtras();
464 Uri openUri = intent.getData();
471 else if (bundle.containsKey(PARAM_INSTANCE))
473 int inst = bundle.getInt(PARAM_INSTANCE);
474 session = GlobalApp.getSession(inst);
475 bitmap = session.getSurface().getBitmap();
478 else if (bundle.containsKey(PARAM_CONNECTION_REFERENCE))
480 String refStr = bundle.getString(PARAM_CONNECTION_REFERENCE);
481 if (ConnectionReference.isHostnameReference(refStr))
483 BookmarkBase bookmark =
new BookmarkBase();
484 bookmark.setHostname(ConnectionReference.getHostname(refStr));
487 else if (ConnectionReference.isBookmarkReference(refStr))
489 sessionViewModel.loadBookmarkById(ConnectionReference.getBookmarkId(refStr),
491 if (bookmark != null)
494 closeSessionActivity(RESULT_CANCELED);
499 closeSessionActivity(RESULT_CANCELED);
505 closeSessionActivity(RESULT_CANCELED);
509 private void connect(BookmarkBase bookmark)
511 session = GlobalApp.createSession(bookmark, getApplicationContext());
513 BookmarkBase.ScreenSettings screenSettings =
514 session.getBookmark().getActiveScreenSettings();
515 Log.v(TAG,
"Screen Resolution: " + screenSettings.getResolutionString());
516 if (screenSettings.isAutomatic())
520 screenSettings.setHeight(screen_height);
521 screenSettings.setWidth(screen_width);
523 if (screenSettings.isFitScreen())
525 screenSettings.setHeight(screen_height);
526 screenSettings.setWidth(screen_width);
530 java.util.ArrayList<String> needed =
new java.util.ArrayList<>();
531 if (bookmark.getAdvancedSettings().getRedirectMicrophone() &&
532 checkSelfPermission(Manifest.permission.RECORD_AUDIO) !=
533 PackageManager.PERMISSION_GRANTED)
534 needed.add(Manifest.permission.RECORD_AUDIO);
535 if (bookmark.getAdvancedSettings().getRedirectCamera() &&
536 checkSelfPermission(Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)
537 needed.add(Manifest.permission.CAMERA);
539 if (!needed.isEmpty())
541 pendingConnectBookmark = bookmark;
542 requestPermissions(needed.toArray(
new String[0]), REQUEST_MEDIA_PERMISSIONS);
546 connectWithTitle(bookmark.getLabel());
550 public void onRequestPermissionsResult(
int requestCode, @NonNull String[] permissions,
551 @NonNull
int[] grantResults)
553 super.onRequestPermissionsResult(requestCode, permissions, grantResults);
554 if (requestCode == REQUEST_MEDIA_PERMISSIONS && pendingConnectBookmark !=
null)
556 BookmarkBase bookmark = pendingConnectBookmark;
557 pendingConnectBookmark =
null;
558 connectWithTitle(bookmark.getLabel());
562 private void connect(Uri openUri)
564 session = GlobalApp.createSession(openUri, getApplicationContext());
566 connectWithTitle(openUri.getAuthority());
569 static class ConnectThread
extends Thread
571 private final SessionState runnableSession;
572 private final Context context;
574 public ConnectThread(@NonNull Context context, @NonNull SessionState session)
576 this.context = context;
577 runnableSession = session;
582 runnableSession.connect(context.getApplicationContext());
586 private ConnectThread connectThread =
null;
588 private void connectWithTitle(String title)
590 session.setUIEventListener(
this);
592 sessionViewModel.register(session.getInstance());
594 dialogs.showProgress(title, () -> {
595 connectCancelledByUser =
true;
596 LibFreeRDP.cancelConnection(session.getInstance());
599 connectThread =
new ConnectThread(getApplicationContext(), session);
600 connectThread.start();
605 private void bindSession()
607 Log.v(TAG,
"bindSession called");
608 session.setUIEventListener(
this);
609 sessionView.onSurfaceChange(session);
610 scrollView.requestLayout();
612 Bitmap surface = session.getSurface() !=
null ? session.getSurface().getBitmap() :
null;
613 inputManager.attachSession(session.getInstance(), surface);
614 inputManager.setScreenSize(screen_width, screen_height);
616 View rootView = findViewById(R.id.session_root_view);
617 if (rootView !=
null)
618 ViewCompat.requestApplyInsets(rootView);
621 private void closeSessionActivity(
int resultCode)
624 setResult(resultCode, getIntent());
628 public void handleBackPressed()
631 if (inputManager.isAnyKeyboardVisible())
633 inputManager.hideKeyboards();
636 if (inputManager.handleBackAsAltF4())
640 if (System.currentTimeMillis() - backPressedTime < 2000)
642 connectCancelledByUser =
true;
643 LibFreeRDP.disconnect(session.getInstance());
647 backPressedTime = System.currentTimeMillis();
648 Toast.makeText(
this, R.string.session_double_back_to_exit, Toast.LENGTH_SHORT).show();
652 @Override
public boolean onKeyLongPress(
int keyCode, KeyEvent event)
654 if (inputManager.onAndroidKeyLongPress(keyCode))
656 return super.onKeyLongPress(keyCode, event);
659 boolean handleKeyEvent(KeyEvent event)
661 return inputManager !=
null && inputManager.onAndroidKeyEvent(event);
670 @Override
public boolean onKeyDown(
int keycode, KeyEvent event)
672 if (keycode == KeyEvent.KEYCODE_BACK)
673 return super.onKeyDown(keycode, event);
674 return inputManager.onAndroidKeyEvent(event);
677 @Override
public boolean onKeyUp(
int keycode, KeyEvent event)
679 if (keycode == KeyEvent.KEYCODE_BACK)
680 return super.onKeyUp(keycode, event);
681 return inputManager.onAndroidKeyEvent(event);
686 @Override
public boolean onKeyMultiple(
int keyCode,
int repeatCount, KeyEvent event)
688 return inputManager.onAndroidKeyEvent(event);
696 @Override
public void OnSettingsChanged(
int width,
int height,
int bpp)
700 bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
702 bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
704 session.setSurface(
new BitmapDrawable(getResources(), bitmap));
706 if (inputManager !=
null)
707 inputManager.setBitmap(bitmap);
709 if (session.getBookmark() ==
null)
719 BookmarkBase.ScreenSettings settings = session.getBookmark().getActiveScreenSettings();
720 if ((settings.getWidth() != width && settings.getWidth() != width + 1) ||
721 settings.getHeight() != height || settings.getColors() != bpp)
722 uiHandler.sendMessage(Message.obtain(
723 null, DISPLAY_TOAST, getResources().getText(R.string.info_capabilities_changed)));
726 @Override
public void OnGraphicsUpdate(
int x,
int y,
int width,
int height)
728 LibFreeRDP.updateGraphics(session.getInstance(), bitmap, x, y, width, height);
730 sessionView.addInvalidRegion(
new Rect(x, y, x + width, y + height));
737 uiHandler.sendEmptyMessage(REFRESH_SESSIONVIEW);
740 @Override
public void OnGraphicsResize(
int width,
int height,
int bpp)
744 bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
746 bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);
747 session.setSurface(
new BitmapDrawable(getResources(), bitmap));
749 if (inputManager !=
null)
750 inputManager.setBitmap(bitmap);
756 uiHandler.sendEmptyMessage(GRAPHICS_CHANGED);
760 public boolean OnAuthenticate(StringBuilder username, StringBuilder domain,
761 StringBuilder password)
767 public boolean OnGatewayAuthenticate(StringBuilder username, StringBuilder domain,
768 StringBuilder password)
770 return dialogs.promptCredentials(username, domain, password);
774 public int OnVerifiyCertificateEx(String host,
long port, String commonName, String subject,
775 String issuer, String fingerprint,
long flags)
777 if (ApplicationSettingsActivity.getAcceptAllCertificates(
this))
779 return dialogs.verifyCertificate(host, port, subject, issuer, fingerprint, flags);
783 public int OnVerifyChangedCertificateEx(String host,
long port, String commonName,
784 String subject, String issuer, String fingerprint,
785 String oldSubject, String oldIssuer,
786 String oldFingerprint,
long flags)
788 if (ApplicationSettingsActivity.getAcceptAllCertificates(
this))
790 return dialogs.verifyChangedCertificate(host, port, subject, issuer, fingerprint, flags);
793 @Override
public boolean OnExperimentalFeature(
int feature)
795 final String featureKey;
796 final String displayName;
799 case LibFreeRDP.EXPERIMENTAL_REMOTEAPP:
800 featureKey =
"remoteapp";
801 displayName = getString(R.string.experimental_feature_remoteapp);
803 case LibFreeRDP.EXPERIMENTAL_CAMERA:
804 featureKey =
"camera";
805 displayName = getString(R.string.experimental_feature_camera);
810 if (ApplicationSettingsActivity.isExperimentalEnabled(
this, featureKey))
813 connectCancelledByUser =
true;
814 dialogs.showExperimentalBlocked(displayName);
818 @Override
public void OnRemoteClipboardChanged(String data)
820 Log.v(TAG,
"OnRemoteClipboardChanged: " + data);
821 mClipboardManager.setClipboardData(data);
824 @Override
public void OnRemoteClipboardImageChanged(
byte[] data)
826 Log.v(TAG,
"OnRemoteClipboardImageChanged: " + data.length +
" bytes");
827 mClipboardManager.setClipboardImage(data);
830 @Override
public void OnPointerSet(
int[] pixels,
int width,
int height,
int hotX,
int hotY)
832 Bundle data =
new Bundle();
833 data.putIntArray(
"pixels", pixels);
834 data.putInt(
"width", width);
835 data.putInt(
"height", height);
836 data.putInt(
"hotX", hotX);
837 data.putInt(
"hotY", hotY);
838 Message msg = uiHandler.obtainMessage(POINTER_SET);
840 uiHandler.sendMessage(msg);
843 @Override
public void OnPointerSetNull()
845 uiHandler.sendEmptyMessage(POINTER_SET);
848 @Override
public void OnPointerSetDefault()
850 sessionView.setDefaultCursor();
853 @Override
public void OnRailWindowUpdate(
long windowId,
int width,
int height,
int[] pixels)
855 railManager.onWindowUpdate(windowId, width, height, pixels);
858 @Override
public void OnRailWindowMove(
long windowId,
int x,
int y,
int w,
int h)
860 railManager.onWindowMove(windowId, x, y, w, h);
863 @Override
public void OnRailWindowHide(
long windowId)
865 railManager.onWindowHide(windowId);
868 @Override
public void OnRailWindowDestroy(
long windowId)
870 railManager.onWindowDestroy(windowId);
873 @Override
public void OnRailSessionEnd()
875 railManager.onSessionEnd();
878 @Override
public void OnRailMonitoredDesktop(
long[] windowIds,
long activeWindowId)
880 railManager.onMonitoredDesktop(windowIds, activeWindowId);
887 @Override
public boolean onGenericMotionEvent(MotionEvent e)
889 super.onGenericMotionEvent(e);
890 return inputManager !=
null && inputManager.onGenericMotionEvent(e);
895 @Override
public void onClipboardChanged(String data)
897 Log.v(TAG,
"onClipboardChanged: " + data);
899 LibFreeRDP.sendClipboardData(session.getInstance(), data);
902 @Override
public void onClipboardImageChanged(
byte[] data, String mimeType)
904 if (session !=
null && data !=
null)
905 LibFreeRDP.sendClipboardImageData(session.getInstance(), data, mimeType);
908 private void onConnectionStateChanged(SessionViewModel.ConnectionState state)
915 onSessionConnected();
921 onSessionDisconnected();
928 private void onSessionConnected()
930 Log.v(TAG,
"onSessionConnected");
932 if (connectCancelledByUser)
934 LibFreeRDP.disconnect(session.getInstance());
935 closeSessionActivity(RESULT_CANCELED);
942 if (ApplicationSettingsActivity.getKeepScreenOnWhenConnected(
this))
944 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
947 dialogs.dismissProgress();
949 if (session.getBookmark() ==
null)
956 Bundle bundle = getIntent().getExtras();
957 if (bundle !=
null && bundle.containsKey(PARAM_CONNECTION_REFERENCE))
959 if (ConnectionReference.isHostnameReference(
960 bundle.getString(PARAM_CONNECTION_REFERENCE)))
962 assert session.getBookmark().getType() == BookmarkBase.TYPE_MANUAL;
963 sessionViewModel.recordQuickConnectHistory(session.getBookmark().getHostname());
968 private void onSessionFailed()
970 Log.v(TAG,
"onSessionFailed");
973 if (inputManager !=
null)
974 inputManager.cancelPendingEvents();
979 if (!connectCancelledByUser)
980 uiHandler.sendMessage(Message.obtain(
981 null, DISPLAY_TOAST, getResources().getText(R.string.error_connection_failure)));
983 closeSessionActivity(RESULT_CANCELED);
986 private void onSessionDisconnected()
988 Log.v(TAG,
"onSessionDisconnected");
991 if (inputManager !=
null)
992 inputManager.cancelPendingEvents();
994 if (ApplicationSettingsActivity.getKeepScreenOnWhenConnected(
this))
996 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
1001 railManager.clear();
1003 session.setUIEventListener(
null);
1004 closeSessionActivity(RESULT_OK);