32 extends AppCompatActivity implements PreferenceFragmentCompat.OnPreferenceStartFragmentCallback
34 public static final String PARAM_CONNECTION_REFERENCE =
"conRef";
35 private static final String TAG =
"BookmarkActivity";
36 private static final String PREFS_NAME =
"TEMP";
40 private final SharedPreferences.OnSharedPreferenceChangeListener prefsListener =
41 (prefs, key) -> viewModel.setSettingsChanged(
true);
43 @Override
protected void onCreate(Bundle savedInstanceState)
45 super.onCreate(savedInstanceState);
46 setContentView(R.layout.activity_bookmark);
48 if (getSupportActionBar() !=
null)
50 getSupportActionBar().setDisplayHomeAsUpEnabled(
true);
55 viewModel.getSaveCompleteEvent().observe(
this, isComplete -> {
60 viewModel.getBookmarkLiveData().observe(
this, bookmark -> {
62 if (getSupportFragmentManager().findFragmentByTag(
"main") ==
null)
64 getSupportFragmentManager()
66 .replace(R.id.bookmark_fragment_container,
new MainFragment(),
"main")
70 getSharedPreferences(PREFS_NAME, MODE_PRIVATE)
71 .registerOnSharedPreferenceChangeListener(prefsListener);
74 viewModel.loadBookmark(getIntent().getExtras(),
75 getSharedPreferences(PREFS_NAME, MODE_PRIVATE));
77 getOnBackPressedDispatcher().addCallback(
this,
new OnBackPressedCallback(
true) {
78 @Override
public void handleOnBackPressed()
80 if (getSupportFragmentManager().getBackStackEntryCount() > 0)
81 getSupportFragmentManager().popBackStack();
83 handleRootBackPress();
88 @Override
protected void onDestroy()
91 getSharedPreferences(PREFS_NAME, MODE_PRIVATE)
92 .unregisterOnSharedPreferenceChangeListener(prefsListener);
95 @Override
public boolean onSupportNavigateUp()
97 getOnBackPressedDispatcher().onBackPressed();
101 @Override
public boolean onCreateOptionsMenu(Menu menu)
103 MenuInflater inflater = getMenuInflater();
104 inflater.inflate(R.menu.bookmark_menu, menu);
108 @Override
public boolean onOptionsItemSelected(MenuItem item)
110 if (item.getItemId() == R.id.action_save)
112 SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
113 if (!verifySettings(prefs))
115 new AlertDialog.Builder(
this)
116 .setTitle(R.string.error_bookmark_incomplete_title)
117 .setMessage(R.string.error_bookmark_incomplete)
118 .setPositiveButton(R.string.cancel, (d, w) -> finish())
119 .setNegativeButton(R.string.cont, (d, w) -> d.cancel())
124 viewModel.saveBookmark(prefs);
128 return super.onOptionsItemSelected(item);
132 public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref)
134 PreferenceFragmentCompat fragment =
135 (PreferenceFragmentCompat)getSupportFragmentManager().getFragmentFactory().instantiate(
136 getClassLoader(), pref.getFragment());
137 fragment.setArguments(pref.getExtras());
139 getSupportFragmentManager()
141 .replace(R.id.bookmark_fragment_container, fragment)
142 .addToBackStack(
null)
147 private void handleRootBackPress()
149 SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
150 if (!verifySettings(prefs))
152 new AlertDialog.Builder(
this)
153 .setTitle(R.string.error_bookmark_incomplete_title)
154 .setMessage(R.string.error_bookmark_incomplete)
155 .setPositiveButton(R.string.cancel, (d, w) -> finish())
156 .setNegativeButton(R.string.cont, (d, w) -> d.cancel())
159 else if (viewModel.isNewBookmark() || viewModel.isSettingsChanged())
161 new AlertDialog.Builder(
this)
162 .setTitle(R.string.dlg_title_save_bookmark)
163 .setMessage(R.string.dlg_save_bookmark)
164 .setPositiveButton(R.string.yes, (d, w) -> { viewModel.saveBookmark(prefs); })
165 .setNegativeButton(R.string.no, (d, w) -> finish())
174 private boolean verifySettings(SharedPreferences prefs)
176 return !prefs.getString(
"bookmark.label",
"").isEmpty() &&
177 !prefs.getString(
"bookmark.hostname",
"").isEmpty() &&
178 prefs.getInt(
"bookmark.port", -1) > 0;
187 @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
189 getPreferenceManager().setSharedPreferencesName(PREFS_NAME);
190 getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE);
191 setPreferencesFromResource(R.xml.bookmark_settings, rootKey);
193 Preference credPref = findPreference(
"bookmark.credentials");
194 if (credPref !=
null)
196 credPref.setSummaryProvider(preference -> {
197 SharedPreferences sp = getPreferenceManager().getSharedPreferences();
198 String username = sp.getString(
"bookmark.username",
"<none>");
199 String domain = sp.getString(
"bookmark.domain",
"");
201 if (username.isEmpty())
204 if (!domain.isEmpty())
205 return domain +
"\\" + username;
211 Preference screenPref = findPreference(
"bookmark.screen");
212 if (screenPref !=
null)
214 screenPref.setSummaryProvider(preference -> {
215 SharedPreferences sp = getPreferenceManager().getSharedPreferences();
216 String res = sp.getString(
"bookmark.resolution",
"800x600");
217 if (
"automatic".equals(res))
218 res = getString(R.string.resolution_automatic);
219 else if (
"custom".equals(res))
220 res = getString(R.string.resolution_custom);
221 else if (
"fitscreen".equals(res))
222 res = getString(R.string.resolution_fit);
223 int colors = sp.getInt(
"bookmark.colors", 16);
224 return res +
"@" + colors;
234 @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
236 getPreferenceManager().setSharedPreferencesName(PREFS_NAME);
237 getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE);
238 setPreferencesFromResource(R.xml.credentials_settings, rootKey);
240 Preference passwordPref = findPreference(
"bookmark.password");
241 if (passwordPref !=
null)
243 passwordPref.setSummaryProvider(preference -> {
244 SharedPreferences sp = getPreferenceManager().getSharedPreferences();
245 String pwd = sp.getString(
"bookmark.password",
"");
246 return pwd.isEmpty() ? getString(R.string.settings_password_empty)
247 : getString(R.string.settings_password_present);
257 @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
259 getPreferenceManager().setSharedPreferencesName(PREFS_NAME);
260 getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE);
261 setPreferencesFromResource(R.xml.screen_settings, rootKey);
262 applyInitialResolutionState();
263 setIntSummaryProvider();
266 @Override
public void onStart()
269 Preference res = findPreference(
"bookmark.resolution");
272 res.setOnPreferenceChangeListener((pref, newValue) -> {
273 boolean custom =
"custom".equalsIgnoreCase((String)newValue);
274 setEnabled(
"bookmark.width", custom);
275 setEnabled(
"bookmark.height", custom);
281 private void applyInitialResolutionState()
283 SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
284 boolean custom =
"custom".equalsIgnoreCase(prefs.getString(
"bookmark.resolution",
""));
285 setEnabled(
"bookmark.width", custom);
286 setEnabled(
"bookmark.height", custom);
289 private void setEnabled(String key,
boolean enabled)
291 Preference p = findPreference(key);
293 p.setEnabled(enabled);
296 private void setIntSummaryProvider()
298 Preference resPref = findPreference(
"bookmark.resolution");
301 resPref.setSummaryProvider(preference -> {
302 SharedPreferences sp = getPreferenceManager().getSharedPreferences();
303 String res = sp.getString(
"bookmark.resolution",
"800x600");
304 if (
"automatic".equals(res))
305 return getString(R.string.resolution_automatic);
306 if (
"custom".equals(res))
307 return getString(R.string.resolution_custom);
308 if (
"fitscreen".equals(res))
309 return getString(R.string.resolution_fit);
320 @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
322 getPreferenceManager().setSharedPreferencesName(PREFS_NAME);
323 getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE);
324 setPreferencesFromResource(R.xml.performance_flags, rootKey);
325 if (!LibFreeRDP.hasH264Support())
327 Preference p = findPreference(getString(R.string.preference_key_h264));
338 @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
340 getPreferenceManager().setSharedPreferencesName(PREFS_NAME);
341 getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE);
342 setPreferencesFromResource(R.xml.advanced_settings, rootKey);
344 SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
347 setEnabled(
"bookmark.gateway_settings",
348 prefs.getBoolean(
"bookmark.enable_gateway_settings",
false));
353 BookmarkBase bookmark = vm.getBookmark();
354 if (bookmark !=
null && bookmark.getType() != BookmarkBase.TYPE_MANUAL)
356 PreferenceScreen screen = getPreferenceScreen();
357 removeIfPresent(screen,
"bookmark.enable_gateway_settings");
358 removeIfPresent(screen,
"bookmark.gateway_settings");
362 @Override
public void onStart()
366 Preference gwCheck = findPreference(
"bookmark.enable_gateway_settings");
369 gwCheck.setOnPreferenceChangeListener((pref, newValue) -> {
370 setEnabled(
"bookmark.gateway_settings", (Boolean)newValue);
376 private void setEnabled(String key,
boolean enabled)
378 Preference p = findPreference(key);
380 p.setEnabled(enabled);
383 private void removeIfPresent(PreferenceScreen screen, String key)
385 Preference p = findPreference(key);
387 screen.removePreference(p);
395 @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
397 getPreferenceManager().setSharedPreferencesName(PREFS_NAME);
398 getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE);
399 setPreferencesFromResource(R.xml.gateway_settings, rootKey);
407 @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
409 getPreferenceManager().setSharedPreferencesName(PREFS_NAME);
410 getPreferenceManager().setSharedPreferencesMode(MODE_PRIVATE);
411 setPreferencesFromResource(R.xml.debug_settings, rootKey);