messageCreateFragment.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. package com.noahvogt.miniprojekt;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.content.SharedPreferences;
  5. import android.content.DialogInterface;
  6. import android.content.Intent;
  7. import android.os.Bundle;
  8. import android.os.Message;
  9. import android.text.TextUtils;
  10. import android.view.LayoutInflater;
  11. import android.view.MenuItem;
  12. import android.view.View;
  13. import android.view.ViewGroup;
  14. import android.widget.EditText;
  15. import android.widget.ImageButton;
  16. import android.widget.PopupMenu;
  17. import android.widget.Toast;
  18. import androidx.annotation.NonNull;
  19. import androidx.annotation.Nullable;
  20. import androidx.appcompat.app.AlertDialog;
  21. import androidx.fragment.app.DialogFragment;
  22. import java.util.concurrent.ExecutorService;
  23. import java.util.concurrent.Executors;
  24. public class messageCreateFragment extends DialogFragment implements PopupMenu.OnMenuItemClickListener {
  25. public static final String EXTRA_TO = "com.example.android.namelistsql.NAME";
  26. public static final String EXTRA_FROM = "com.example.android.namelistsql.FROM";
  27. public static final String EXTRA_SUBJECT = "com.example.android.namelistsql.SUBJECT";
  28. public static final String EXTRA_MESSAGE = "com.example.android.namelistsql.MESSAGE";
  29. public static final String EXTRA_DATE = "com.example.android.namelistsql.DATE";
  30. public EditText sendingAddressObject;
  31. public EditText receivingAddressObject;
  32. public EditText subjectObject;
  33. public EditText messageBodyObject;
  34. public static final int RESULT_CANCELED = 0;
  35. public static final int RESULT_OK = -1;
  36. public Activity activity = new Activity();
  37. public static Intent replyIntent = new Intent();
  38. public static messageCreateFragment newInstance() {
  39. return new messageCreateFragment();
  40. }
  41. private AlertDialog dialog;
  42. SharedPreferences preferences;
  43. private static final int NUMBER_OF_THREADS = 4;
  44. static final ExecutorService databaseWriteExecutor =
  45. Executors.newFixedThreadPool(NUMBER_OF_THREADS);
  46. /* set theming style */
  47. @Override
  48. public void onCreate(@Nullable Bundle savedInstanceState) {
  49. super.onCreate(savedInstanceState);
  50. setStyle(DialogFragment.STYLE_NORMAL, R.style.messageCreateTheme);
  51. preferences = getActivity().getSharedPreferences("UserPrefrences", Context.MODE_PRIVATE);
  52. }
  53. @Nullable
  54. @Override
  55. public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  56. /* set and inflate layout */
  57. View view = inflater.inflate(R.layout.message_create_fragment, container, false);
  58. /* init vars */
  59. ImageButton closeButton = view.findViewById(R.id.create_message_close_button);
  60. final ImageButton sendButton = view.findViewById(R.id.create_message_send_button);
  61. ImageButton dotButton = view.findViewById(R.id.create_message_dots_button);
  62. ImageButton attachButton = view.findViewById(R.id.create_message_attach_button);
  63. sendingAddressObject = (EditText) view.findViewById(R.id.create_message_sending_address_text);
  64. receivingAddressObject = (EditText) view.findViewById(R.id.create_message_receiving_address_text);
  65. subjectObject = (EditText) view.findViewById(R.id.create_message_subject_text);
  66. messageBodyObject = (EditText) view.findViewById(R.id.create_message_body_text);
  67. /* set logged in email address as sending address */
  68. String loginEmail = preferences.getString("email","");
  69. sendingAddressObject.setText(loginEmail);
  70. /* get string vars, MAYBE NOT HERE */
  71. String sendingAddress = sendingAddressObject.getText().toString();
  72. String receivingAddress = receivingAddressObject.getText().toString();
  73. //String subject = subjectObject.getText().toString();
  74. String messageBody = messageBodyObject.getText().toString();
  75. /* TODO: add cc + bcc functionality */
  76. /* dosen't wotk cause Activity is not extendet and used as variable */
  77. /* button listeners */
  78. closeButton.setOnClickListener(new View.OnClickListener() {
  79. @Override
  80. public void onClick(View v) {
  81. String subject = subjectObject.getText().toString();
  82. String messageBody = messageBodyObject.getText().toString();
  83. /* give alert dialog box to user in case input fields are not empty */
  84. if (subject.isEmpty() && messageBody.isEmpty()) {
  85. dismiss();
  86. }
  87. else {
  88. /* setup dialog */
  89. AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
  90. alertDialogBuilder.setTitle("Warning");
  91. alertDialogBuilder
  92. .setMessage("Do you want to save your Draft?")
  93. .setCancelable(false)
  94. .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
  95. public void onClick(DialogInterface dialog, int id) {
  96. activity.setResult(RESULT_CANCELED, replyIntent);
  97. String from = sendingAddressObject.getText().toString();
  98. String to = receivingAddressObject.getText().toString();
  99. String subject = subjectObject.getText().toString();
  100. String message = messageBodyObject.getText().toString();
  101. replyIntent.putExtra(EXTRA_FROM, from);
  102. replyIntent.putExtra(EXTRA_TO, to);
  103. replyIntent.putExtra(EXTRA_SUBJECT, subject);
  104. replyIntent.putExtra(EXTRA_MESSAGE, message);
  105. activity.setResult(RESULT_OK, replyIntent);
  106. activity.finish();
  107. Toast.makeText(getContext(), "messageCreateFragmentReadIn", Toast.LENGTH_SHORT).show();
  108. Toast.makeText(getContext(), replyIntent.getStringExtra(EXTRA_FROM), Toast.LENGTH_SHORT).show();
  109. Intent intent = new Intent(getContext(), NewDraftMessageActivity.class);
  110. startActivityForResult(intent, MainActivity.NEW_WORD_ACTIVITY_REQUEST_CODE);
  111. /*if this button is clicked, close the whole fragment */
  112. dismiss();
  113. }
  114. })
  115. .setNegativeButton("No",new DialogInterface.OnClickListener() {
  116. public void onClick(DialogInterface dialog,int id) {
  117. /* if this button is clicked, close the hole fragment */
  118. dismiss();
  119. }
  120. });
  121. /* create + show alert dialog */
  122. AlertDialog alertDialog = alertDialogBuilder.create();
  123. alertDialog.show();
  124. }
  125. }
  126. });
  127. attachButton.setOnClickListener(new View.OnClickListener() {
  128. @Override
  129. public void onClick(View v) {
  130. /* TODO: add file attachment functionality */
  131. }
  132. });
  133. dotButton.setOnClickListener(new View.OnClickListener() {
  134. @Override
  135. public void onClick(View v) {
  136. PopupMenu popupMenu = new PopupMenu(getActivity(), v);
  137. popupMenu.setOnMenuItemClickListener(messageCreateFragment.this::onMenuItemClick);
  138. popupMenu.inflate(R.menu.create_message_options_menu);
  139. popupMenu.show();
  140. }
  141. });
  142. sendButton.setOnClickListener(new View.OnClickListener() {
  143. @Override
  144. public void onClick(View v) {
  145. /* init vars, MAYBE NEEDED FOR LATER */
  146. String sendingAddress = sendingAddressObject.getText().toString();
  147. String receivingAddress = receivingAddressObject.getText().toString();
  148. String subject = subjectObject.getText().toString();
  149. String messageBody = messageBodyObject.getText().toString();
  150. /* check for valid input */
  151. if (mailFunctions.validateMessageBody(messageBodyObject) && mailFunctions.validateSubject(subjectObject) &&
  152. mailFunctions.validateEmail(receivingAddressObject) && mailFunctions.validateEmail(sendingAddressObject) &&
  153. !mailFunctions.checkForSameEmail(sendingAddressObject, receivingAddressObject)) {
  154. Toast.makeText(getActivity(), "sending ... ", Toast.LENGTH_SHORT).show();
  155. dismiss();
  156. } else {
  157. Toast.makeText(getActivity(), "Please check your input", Toast.LENGTH_SHORT).show();
  158. }
  159. /* TODO: implement actual sending functionality */
  160. }
  161. });
  162. return view;
  163. }
  164. /* TODO: add useful functionality to the menu + consider not using Resource ID's in switch statement
  165. IDEAS:
  166. - safe to draft
  167. - clear all user input
  168. - change / check email signature
  169. - some email header hacking / options / customization
  170. - mail server probing
  171. - sending address spoofer ??
  172. */
  173. @Override
  174. public boolean onMenuItemClick(MenuItem item) {
  175. switch (item.getItemId()) {
  176. case R.id.create_message_delete:
  177. Toast.makeText(getActivity(), "item 1 clicked", Toast.LENGTH_LONG).show();
  178. return true;
  179. case R.id.create_message_spam:
  180. Toast.makeText(getActivity(), "item 2 clicked", Toast.LENGTH_LONG).show();
  181. return true;
  182. case R.id.create_message_move_to:
  183. Toast.makeText(getActivity(), "item 3 clicked", Toast.LENGTH_LONG).show();
  184. return true;
  185. case R.id.create_message_sent_to:
  186. Toast.makeText(getActivity(), "item 4 clicked", Toast.LENGTH_LONG).show();
  187. return true;
  188. default: /* this case should never occur */
  189. return false;
  190. }
  191. }
  192. }