ProfileEditFragment.java 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. package de.tudarmstadt.informatik.hostage.ui2.fragment;
  2. import android.app.ActionBar;
  3. import android.app.Activity;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.content.SharedPreferences;
  7. import android.database.Cursor;
  8. import android.graphics.Bitmap;
  9. import android.graphics.BitmapFactory;
  10. import android.graphics.drawable.BitmapDrawable;
  11. import android.net.Uri;
  12. import android.os.Bundle;
  13. import android.preference.EditTextPreference;
  14. import android.preference.Preference;
  15. import android.preference.PreferenceFragment;
  16. import android.preference.PreferenceManager;
  17. import android.provider.MediaStore;
  18. import android.view.LayoutInflater;
  19. import android.view.View;
  20. import android.widget.LinearLayout;
  21. import de.tudarmstadt.informatik.hostage.R;
  22. import de.tudarmstadt.informatik.hostage.dao.ProfileManager;
  23. import de.tudarmstadt.informatik.hostage.model.Profile;
  24. /**
  25. * @author Alexander Brakowski
  26. * @created 08.02.14 23:39
  27. */
  28. public class ProfileEditFragment extends PreferenceFragment implements
  29. SharedPreferences.OnSharedPreferenceChangeListener {
  30. private LayoutInflater mInflater;
  31. private SharedPreferences.Editor prefs;
  32. @Override
  33. public void onCreate(Bundle savedInstanceState){
  34. getActivity().getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
  35. super.onCreate(savedInstanceState);
  36. mInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  37. View actionBarButtons = mInflater.inflate(R.layout.actionbar_donebar, new LinearLayout(getActivity()), false);
  38. getActivity().getActionBar().setCustomView(actionBarButtons);
  39. View doneButton = actionBarButtons.findViewById(R.id.action_done);
  40. View cancelButton = actionBarButtons.findViewById(R.id.action_cancel);
  41. doneButton.setOnClickListener(new View.OnClickListener() {
  42. @Override
  43. public void onClick(View v) {
  44. SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
  45. ProfileManager pmanager = ProfileManager.getInstance();
  46. Profile profile = getProfile();
  47. boolean createNew = false;
  48. if(profile == null){
  49. profile = new Profile();
  50. createNew = true;
  51. } else {
  52. if(!profile.isEditable()){
  53. profile = profile.cloneProfile();
  54. profile.mEditable = true;
  55. createNew = true;
  56. }
  57. }
  58. profile.mLabel = prefs.getString("pref_profile_general_name", profile.mLabel);
  59. profile.mIconPath = prefs.getString("pref_profile_general_image", profile.mIconPath);
  60. profile.mText = prefs.getString("pref_profile_general_description", profile.mText);
  61. if(createNew){
  62. profile.mId = -1;
  63. profile.mIconId = 0;
  64. profile.mIconName = "";
  65. pmanager.addProfile(profile);
  66. } else {
  67. pmanager.persistProfile(profile);
  68. }
  69. getActivity().finish();
  70. }
  71. });
  72. cancelButton.setOnClickListener(new View.OnClickListener() {
  73. @Override
  74. public void onClick(View v) {
  75. getActivity().finish();
  76. }
  77. });
  78. Profile profile = getProfile();
  79. prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()).edit();
  80. String pname = "",
  81. pimage = "",
  82. pdesc = "";
  83. if(profile != null){
  84. pname = profile.mLabel;
  85. pimage = profile.mIconPath;
  86. pdesc = profile.mText;
  87. }
  88. prefs.putString("pref_profile_general_name", pname);
  89. prefs.putString("pref_profile_general_image", pimage);
  90. prefs.putString("pref_profile_general_description", pdesc);
  91. prefs.commit();
  92. addPreferencesFromResource(R.xml.profile_preferences);
  93. Preference pref = findPreference("pref_profile_general_image");
  94. assert pref != null;
  95. if(profile != null){
  96. pref.setIcon(profile.getIconDrawable());
  97. }
  98. pref.setOnPreferenceClickListener(
  99. new Preference.OnPreferenceClickListener() {
  100. @Override
  101. public boolean onPreferenceClick(Preference preference) {
  102. Intent intent = new Intent();
  103. intent.setType("image/*");
  104. intent.setAction(Intent.ACTION_GET_CONTENT);
  105. int PICK_IMAGE = 1;
  106. startActivityForResult(Intent.createChooser(intent, getString(R.string.select_icon)), PICK_IMAGE);
  107. return true;
  108. }
  109. }
  110. );
  111. if(profile != null){
  112. findPreference("pref_profile_general_name").setSummary(profile.mLabel);
  113. findPreference("pref_profile_general_description").setSummary(profile.mText);
  114. }
  115. }
  116. public Profile getProfile(){
  117. ProfileManager pmanager = ProfileManager.getInstance();
  118. Intent intent = getActivity().getIntent();
  119. int profile_id = intent.getIntExtra("profile_id", -1);
  120. if(profile_id != -1){
  121. return pmanager.getProfile(profile_id);
  122. }
  123. return null;
  124. }
  125. @Override
  126. public void onResume() {
  127. super.onResume();
  128. getPreferenceManager().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
  129. }
  130. @Override
  131. public void onPause() {
  132. getPreferenceManager().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
  133. super.onPause();
  134. }
  135. /**
  136. * Called when a shared preference is changed, added, or removed. This
  137. * may be called even if a preference is set to its existing value.
  138. *
  139. * <p>This callback will be run on your main thread.
  140. *
  141. * @param sharedPreferences The {@link android.content.SharedPreferences} that received
  142. * the change.
  143. * @param key The key of the preference that was changed, added, or
  144. */
  145. @Override
  146. public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
  147. Preference p = findPreference(key);
  148. if(p instanceof EditTextPreference){
  149. p.setSummary(sharedPreferences.getString(key, ""));
  150. }
  151. }
  152. @Override
  153. public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
  154. super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
  155. if(resultCode == Activity.RESULT_OK){
  156. Uri selectedImage = imageReturnedIntent.getData();
  157. String[] filePathColumn = {MediaStore.Images.Media.DATA};
  158. assert selectedImage != null;
  159. Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null);
  160. assert cursor != null;
  161. cursor.moveToFirst();
  162. int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
  163. String filePath = cursor.getString(columnIndex);
  164. cursor.close();
  165. Preference pref = findPreference("pref_profile_general_image");
  166. BitmapFactory.Options options = new BitmapFactory.Options();
  167. options.inPreferredConfig = Bitmap.Config.ARGB_8888;
  168. Bitmap bitmap = BitmapFactory.decodeFile(filePath, options);
  169. assert pref != null;
  170. pref.setIcon(new BitmapDrawable(getResources(), bitmap));
  171. prefs.putString("pref_profile_general_image", filePath);
  172. prefs.commit();
  173. }
  174. }
  175. }