FreeRDP
Loading...
Searching...
No Matches
SessionViewModel.java
1/*
2 SessionViewModel — exposes RDP connection state as LiveData
3
4 Copyright 2026 Thincast Technologies GmbH
5
6 This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
7 If a copy of the MPL was not distributed with this file, You can obtain one at
8 http://mozilla.org/MPL/2.0/.
9*/
10
11package com.freerdp.freerdpcore.presentation;
12
13import android.app.Application;
14import android.os.Handler;
15import android.os.Looper;
16
17import androidx.annotation.NonNull;
18import androidx.lifecycle.AndroidViewModel;
19import androidx.lifecycle.LiveData;
20import androidx.lifecycle.MutableLiveData;
21
22import com.freerdp.freerdpcore.application.GlobalApp;
23import com.freerdp.freerdpcore.data.AppDatabase;
24import com.freerdp.freerdpcore.data.HistoryDatabase;
25import com.freerdp.freerdpcore.domain.BookmarkBase;
26import com.freerdp.freerdpcore.services.ManualBookmarkGateway;
27import com.freerdp.freerdpcore.services.QuickConnectHistoryGateway;
28
29import java.util.concurrent.ExecutorService;
30import java.util.concurrent.Executors;
31import java.util.function.Consumer;
32
33public class SessionViewModel extends AndroidViewModel
34{
35 public enum ConnectionState
36 {
37 IDLE,
38 CONNECTING,
39 CONNECTED,
40 FAILED,
41 DISCONNECTED
42 }
43
44 private final MutableLiveData<ConnectionState> state =
45 new MutableLiveData<>(ConnectionState.IDLE);
46 private long registeredInstance = 0;
47
48 private final ExecutorService executor = Executors.newSingleThreadExecutor();
49 private final Handler mainHandler = new Handler(Looper.getMainLooper());
50 private final ManualBookmarkGateway manualBookmarkGateway;
51 private final QuickConnectHistoryGateway quickConnectHistoryGateway;
52
53 public SessionViewModel(@NonNull Application application)
54 {
55 super(application);
56 manualBookmarkGateway =
57 new ManualBookmarkGateway(AppDatabase.getInstance(application).bookmarkDao());
58 quickConnectHistoryGateway =
59 new QuickConnectHistoryGateway(HistoryDatabase.getInstance(application).historyDao());
60 }
61
62 public LiveData<ConnectionState> getState()
63 {
64 return state;
65 }
66
67 public void register(long instance)
68 {
69 unregister();
70 registeredInstance = instance;
71 state.setValue(ConnectionState.CONNECTING);
72 GlobalApp.registerSessionListener(instance, new GlobalApp.SessionEventListener() {
73 @Override public void onConnectionSuccess()
74 {
75 state.setValue(ConnectionState.CONNECTED);
76 }
77
78 @Override public void onConnectionFailure()
79 {
80 state.setValue(ConnectionState.FAILED);
81 }
82
83 @Override public void onDisconnected()
84 {
85 state.setValue(ConnectionState.DISCONNECTED);
86 }
87 });
88 }
89
90 public void unregister()
91 {
92 if (registeredInstance != 0)
93 {
94 GlobalApp.unregisterSessionListener(registeredInstance);
95 registeredInstance = 0;
96 }
97 }
98
102 public void loadBookmarkById(long bookmarkId, @NonNull Consumer<BookmarkBase> callback)
103 {
104 executor.execute(() -> {
105 final BookmarkBase bookmark = manualBookmarkGateway.findById(bookmarkId);
106 mainHandler.post(() -> callback.accept(bookmark));
107 });
108 }
109
113 public void recordQuickConnectHistory(@NonNull String hostname)
114 {
115 executor.execute(() -> {
116 if (!quickConnectHistoryGateway.historyItemExists(hostname))
117 quickConnectHistoryGateway.addHistoryItem(hostname);
118 });
119 }
120
121 @Override protected void onCleared()
122 {
123 unregister();
124 executor.shutdown();
125 super.onCleared();
126 }
127}
void loadBookmarkById(long bookmarkId, @NonNull Consumer< BookmarkBase > callback)