LoginSettingsActivity.java 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package godau.fynn.dsbdirect.activity.settings;
  2. import android.app.AlertDialog;
  3. import android.content.DialogInterface;
  4. import android.content.Intent;
  5. import android.os.Bundle;
  6. import android.preference.Preference;
  7. import android.preference.PreferenceScreen;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.widget.EditText;
  11. import godau.fynn.dsbdirect.Login;
  12. import godau.fynn.dsbdirect.R;
  13. import godau.fynn.dsbdirect.activity.LoginActivity;
  14. import godau.fynn.dsbdirect.manager.LoginManager;
  15. public class LoginSettingsActivity extends SettingsActivity {
  16. private static final int REQUEST_LOGIN = 0;
  17. public PreferenceFragment getPreferenceFragment() {
  18. return new PreferenceFragment();
  19. }
  20. public static class PreferenceFragment extends SettingsActivity.PreferenceFragment {
  21. @Override
  22. public void onCreate(Bundle savedInstanceState) {
  23. super.onCreate(savedInstanceState);
  24. final LoginManager loginManager = new LoginManager(sharedPreferences);
  25. // Load correct sharedPreferences
  26. getPreferenceManager().setSharedPreferencesName("default");
  27. // Thanks, https://stackoverflow.com/a/37745292
  28. addPreferencesFromResource(R.xml.preferences_none);
  29. PreferenceScreen preferenceScreen = this.getPreferenceScreen();
  30. // Add logins
  31. for (final Login l : loginManager.getLogins()) {
  32. Preference loginPreference = new Preference(getActivity());
  33. loginPreference.setTitle(l.getDisplayName());
  34. if (l.hasDisplayName()) {
  35. loginPreference.setSummary(l.getId());
  36. }
  37. // Prompt for new display name
  38. loginPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
  39. @Override
  40. public boolean onPreferenceClick(Preference preference) {
  41. // Spawn editText layout
  42. final View promptView = LayoutInflater.from(getActivity()).inflate(R.layout.edittext, null);
  43. final EditText editText = promptView.findViewById(R.id.editText);
  44. if (l.hasDisplayName()) {
  45. editText.setText(l.getDisplayName());
  46. }
  47. new AlertDialog.Builder(getActivity())
  48. .setTitle(getActivity().getString(R.string.settings_login_alias_popup, l.getId()))
  49. .setMessage(R.string.settings_login_alias_popup_message)
  50. .setView(promptView)
  51. .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
  52. @Override
  53. public void onClick(DialogInterface dialog, int which) {
  54. if (editText.length() <= 0) {
  55. // To allow display name to be set to school name automatically
  56. l.setDisplayName(null);
  57. } else {
  58. l.setDisplayName(editText.getText().toString());
  59. }
  60. // Write changed login alias to shared preferences
  61. loginManager.write();
  62. // Reload list by recreating
  63. getActivity().recreate();
  64. }
  65. })
  66. .setNegativeButton(R.string.cancel, null)
  67. .setNeutralButton(R.string.settings_login_remove, new DialogInterface.OnClickListener() {
  68. @Override
  69. public void onClick(DialogInterface dialog, int which) {
  70. loginManager.removeLogin(l);
  71. // Reload list by recreating
  72. getActivity().recreate();
  73. }
  74. })
  75. .show();
  76. return true;
  77. }
  78. });
  79. preferenceScreen.addPreference(loginPreference);
  80. }
  81. // Add Add login button
  82. Preference newLoginPreference = new Preference(getActivity());
  83. newLoginPreference.setTitle(R.string.action_add_login);
  84. // TODO: This button could have a '+' icon, but depending on the theme, it would need to be black or white.
  85. newLoginPreference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
  86. @Override
  87. public boolean onPreferenceClick(Preference preference) {
  88. startActivityForResult(new Intent(getActivity(), LoginActivity.class), REQUEST_LOGIN);
  89. // TODO: A drawback of this button is that school name can only be set as display alias when its plan is viewed with parsing enabled, not immediately when added here.
  90. return true;
  91. }
  92. });
  93. preferenceScreen.addPreference(newLoginPreference);
  94. }
  95. @Override
  96. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  97. if (resultCode == RESULT_OK) {
  98. getActivity().recreate();
  99. }
  100. }
  101. }
  102. }