ProfileEditFragment.java 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. package de.tudarmstadt.informatik.hostage.ui2.fragment;
  2. import android.app.ActionBar;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.content.SharedPreferences;
  6. import android.os.Bundle;
  7. import android.preference.EditTextPreference;
  8. import android.preference.Preference;
  9. import android.preference.PreferenceFragment;
  10. import android.preference.PreferenceManager;
  11. import android.view.LayoutInflater;
  12. import android.view.View;
  13. import android.widget.LinearLayout;
  14. import de.tudarmstadt.informatik.hostage.R;
  15. import de.tudarmstadt.informatik.hostage.dao.ProfileManager;
  16. import de.tudarmstadt.informatik.hostage.model.Profile;
  17. /**
  18. * @author Alexander Brakowski
  19. * @created 08.02.14 23:39
  20. */
  21. public class ProfileEditFragment extends PreferenceFragment implements
  22. SharedPreferences.OnSharedPreferenceChangeListener {
  23. private LayoutInflater mInflater;
  24. @Override
  25. public void onCreate(Bundle savedInstanceState){
  26. getActivity().getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
  27. super.onCreate(savedInstanceState);
  28. mInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  29. View actionBarButtons = mInflater.inflate(R.layout.actionbar_donebar, new LinearLayout(getActivity()), false);
  30. getActivity().getActionBar().setCustomView(actionBarButtons);
  31. View doneButton = actionBarButtons.findViewById(R.id.action_done);
  32. View cancelButton = actionBarButtons.findViewById(R.id.action_cancel);
  33. doneButton.setOnClickListener(new View.OnClickListener() {
  34. @Override
  35. public void onClick(View v) {
  36. SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
  37. ProfileManager pmanager = ProfileManager.getInstance();
  38. Profile profile = getProfile();
  39. boolean createNew = false;
  40. if(!profile.isEditable()){
  41. profile = profile.cloneProfile();
  42. profile.editable = true;
  43. createNew = true;
  44. }
  45. profile.text = prefs.getString("pref_profile_general_name", profile.text);
  46. if(createNew){
  47. profile.id = -1;
  48. pmanager.addProfile(profile);
  49. }
  50. getActivity().finish();
  51. }
  52. });
  53. cancelButton.setOnClickListener(new View.OnClickListener() {
  54. @Override
  55. public void onClick(View v) {
  56. getActivity().finish();
  57. }
  58. });
  59. Profile profile = getProfile();
  60. SharedPreferences.Editor prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()).edit();
  61. if(profile != null){
  62. prefs.putString("pref_profile_general_name", profile.text);
  63. prefs.commit();
  64. }
  65. addPreferencesFromResource(R.xml.profile_preferences);
  66. findPreference("pref_profile_general_name").setSummary(profile.text);
  67. }
  68. public Profile getProfile(){
  69. ProfileManager pmanager = ProfileManager.getInstance();
  70. Intent intent = getActivity().getIntent();
  71. int profile_id = intent.getIntExtra("profile_id", -1);
  72. if(profile_id != -1){
  73. return pmanager.getProfile(profile_id);
  74. }
  75. return null;
  76. }
  77. @Override
  78. public void onResume() {
  79. super.onResume();
  80. getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
  81. }
  82. @Override
  83. public void onPause() {
  84. getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
  85. super.onPause();
  86. }
  87. /**
  88. * Called when a shared preference is changed, added, or removed. This
  89. * may be called even if a preference is set to its existing value.
  90. *
  91. * <p>This callback will be run on your main thread.
  92. *
  93. * @param sharedPreferences The {@link android.content.SharedPreferences} that received
  94. * the change.
  95. * @param key The key of the preference that was changed, added, or
  96. */
  97. @Override
  98. public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
  99. Preference p = findPreference(key);
  100. if(p instanceof EditTextPreference){
  101. p.setSummary(sharedPreferences.getString(key, ""));
  102. }
  103. }
  104. }