32 extends AppCompatActivity implements PreferenceFragmentCompat.OnPreferenceStartFragmentCallback
34 @Override
protected void onCreate(Bundle savedInstanceState)
36 super.onCreate(savedInstanceState);
37 setContentView(R.layout.activity_settings);
42 if (getSupportActionBar() !=
null)
44 getSupportActionBar().setDisplayHomeAsUpEnabled(
true);
47 if (savedInstanceState ==
null)
49 getSupportFragmentManager()
51 .replace(R.id.settings_fragment_container,
new MainFragment())
56 @Override
public boolean onSupportNavigateUp()
58 if (getSupportFragmentManager().getBackStackEntryCount() > 0)
60 getSupportFragmentManager().popBackStack();
70 public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref)
72 PreferenceFragmentCompat fragment =
73 (PreferenceFragmentCompat)getSupportFragmentManager().getFragmentFactory().instantiate(
74 getClassLoader(), pref.getFragment());
75 fragment.setArguments(pref.getExtras());
77 getSupportFragmentManager()
79 .replace(R.id.settings_fragment_container, fragment)
94 @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
96 setPreferencesFromResource(R.xml.settings_app_headers, rootKey);
104 @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
106 setPreferencesFromResource(R.xml.settings_app_client, rootKey);
112 public static class UiFragment extends PreferenceFragmentCompat
114 @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
116 setPreferencesFromResource(R.xml.settings_app_ui, rootKey);
117 ListPreference theme = findPreference(getString(R.string.pref_key_theme));
119 theme.setOnPreferenceChangeListener((p, v) -> {
120 AppCompatDelegate.setDefaultNightMode(nightModeFor((String)v));
121 requireActivity().recreate();
131 @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
133 setPreferencesFromResource(R.xml.settings_app_power, rootKey);
141 @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
143 setPreferencesFromResource(R.xml.settings_app_security, rootKey);
145 Preference clearCache =
146 findPreference(getString(R.string.preference_key_security_clear_certificate_cache));
147 if (clearCache !=
null)
148 clearCache.setOnPreferenceClickListener(pref -> {
149 showClearCacheDialog();
154 private void showClearCacheDialog()
157 .Builder(requireContext())
159 .setTitle(R.string.dlg_title_clear_cert_cache)
160 .setMessage(R.string.dlg_msg_clear_cert_cache)
161 .setPositiveButton(android.R.string.ok,
163 clearCertificateCache();
166 .setNegativeButton(android.R.string.cancel, (d, w) -> d.dismiss())
167 .setIcon(android.R.drawable.ic_delete)
171 private boolean deleteDirectory(File dir)
173 if (dir.isDirectory())
175 String[] children = dir.list();
176 for (String file : children)
178 if (!deleteDirectory(
new File(dir, file)))
185 private void clearCertificateCache()
187 Context context = requireContext();
188 File dir =
new File(context.getFilesDir() +
"/.freerdp");
191 if (deleteDirectory(dir))
192 Toast.makeText(context, R.string.info_reset_success, Toast.LENGTH_LONG).show();
194 Toast.makeText(context, R.string.info_reset_failed, Toast.LENGTH_LONG).show();
198 Toast.makeText(context, R.string.info_reset_success, Toast.LENGTH_LONG).show();
205 @Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey)
207 setPreferencesFromResource(R.xml.settings_app_experimental, rootKey);
212 public static boolean isExperimentalEnabled(Context context, String feature)
214 return get(context).getBoolean(
"experimental." + feature,
false);
217 public static SharedPreferences
get(Context context)
219 Context appContext = context.getApplicationContext();
220 PreferenceManager.setDefaultValues(appContext, R.xml.settings_app_client,
false);
221 PreferenceManager.setDefaultValues(appContext, R.xml.settings_app_power,
false);
222 PreferenceManager.setDefaultValues(appContext, R.xml.settings_app_security,
false);
223 PreferenceManager.setDefaultValues(appContext, R.xml.settings_app_ui,
false);
224 PreferenceManager.setDefaultValues(appContext, R.xml.settings_app_experimental,
false);
225 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(appContext);
227 final String key = context.getString(R.string.preference_key_client_name);
228 final String value = preferences.getString(key,
"");
231 final String android_id =
UUID.randomUUID().toString();
232 final String defaultValue = context.getString(R.string.preference_default_client_name);
233 final String name = defaultValue +
"-" + android_id;
234 preferences.edit().putString(key, name.substring(0, 31)).apply();
240 public static int getDisconnectTimeout(Context context)
242 SharedPreferences preferences =
get(context);
243 return preferences.getInt(
244 context.getString(R.string.preference_key_power_disconnect_timeout), 0);
247 public static boolean getKeepScreenOnWhenConnected(Context context)
249 SharedPreferences preferences =
get(context);
250 return preferences.getBoolean(
251 context.getString(R.string.preference_key_power_keep_screen_on_when_connected),
false);
254 public static boolean getHideStatusBar(Context context)
256 SharedPreferences preferences =
get(context);
257 return preferences.getBoolean(context.getString(R.string.preference_key_ui_hide_status_bar),
261 public static boolean getHideNavigationBar(Context context)
263 SharedPreferences preferences =
get(context);
264 return preferences.getBoolean(
265 context.getString(R.string.preference_key_ui_hide_navigation_bar),
false);
268 public static boolean getFitRoundedCorners(Context context)
270 SharedPreferences preferences =
get(context);
271 return preferences.getBoolean(
272 context.getString(R.string.preference_key_ui_fit_rounded_corners),
false);
275 public static boolean getUseBackAsAltf4(Context context)
277 SharedPreferences preferences =
get(context);
278 return preferences.getBoolean(
279 context.getString(R.string.preference_key_ui_use_back_as_altf4),
false);
282 public static boolean getAcceptAllCertificates(Context context)
284 SharedPreferences preferences =
get(context);
285 return preferences.getBoolean(
286 context.getString(R.string.preference_key_accept_certificates),
false);
289 public static boolean getSwapMouseButtons(Context context)
291 SharedPreferences preferences =
get(context);
292 return preferences.getBoolean(
293 context.getString(R.string.preference_key_ui_swap_mouse_buttons),
false);
296 public static boolean getInvertScrolling(Context context)
298 SharedPreferences preferences =
get(context);
299 return preferences.getBoolean(
300 context.getString(R.string.preference_key_ui_invert_scrolling),
false);
303 public static boolean getAskOnExit(Context context)
305 SharedPreferences preferences =
get(context);
306 return preferences.getBoolean(context.getString(R.string.preference_key_ui_ask_on_exit),
310 public static boolean getAutoScrollTouchPointer(Context context)
312 SharedPreferences preferences =
get(context);
313 return preferences.getBoolean(
314 context.getString(R.string.preference_key_ui_auto_scroll_touchpointer),
false);
317 public static String getClientName(Context context)
319 SharedPreferences preferences =
get(context);
320 return preferences.getString(context.getString(R.string.preference_key_client_name),
"");
323 public static int getNightMode(Context context)
326 get(context).getString(context.getString(R.string.pref_key_theme),
"auto"));
329 private static int nightModeFor(String value)
334 return AppCompatDelegate.MODE_NIGHT_NO;
336 return AppCompatDelegate.MODE_NIGHT_YES;
338 return AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM;