messageCreateFragment.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  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.view.LayoutInflater;
  9. import android.view.MenuItem;
  10. import android.view.View;
  11. import android.view.ViewGroup;
  12. import android.widget.EditText;
  13. import android.widget.ImageButton;
  14. import android.widget.PopupMenu;
  15. import android.widget.Toast;
  16. import androidx.annotation.NonNull;
  17. import androidx.annotation.Nullable;
  18. import androidx.appcompat.app.AlertDialog;
  19. import androidx.fragment.app.DialogFragment;
  20. import java.util.concurrent.ExecutorService;
  21. import java.util.concurrent.Executors;
  22. public class messageCreateFragment extends DialogFragment implements PopupMenu.OnMenuItemClickListener {
  23. public static final String EXTRA_TO = "com.example.android.namelistsql.NAME";
  24. public static final String EXTRA_FROM = "com.example.android.namelistsql.FROM";
  25. public static final String EXTRA_SUBJECT = "com.example.android.namelistsql.SUBJECT";
  26. public static final String EXTRA_MESSAGE = "com.example.android.namelistsql.MESSAGE";
  27. public static final String EXTRA_DATE = "com.example.android.namelistsql.DATE";
  28. public EditText sendingAddressObject;
  29. public EditText receivingAddressObject;
  30. public EditText subjectObject;
  31. public EditText messageBodyObject;
  32. public EditText ccObject;
  33. public EditText bccObject;
  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("UserPreferences", 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. ccObject = (EditText) view.findViewById(R.id.create_message_cc_text);
  66. bccObject = (EditText) view.findViewById(R.id.create_message_bcc_text);
  67. subjectObject = (EditText) view.findViewById(R.id.create_message_subject_text);
  68. messageBodyObject = (EditText) view.findViewById(R.id.create_message_body_text);
  69. /* set logged in email address as sending address */
  70. String loginEmail = preferences.getString("email","");
  71. sendingAddressObject.setText(loginEmail);
  72. /* get string vars, MAYBE NOT HERE */
  73. String sendingAddress = sendingAddressObject.getText().toString();
  74. String receivingAddress = receivingAddressObject.getText().toString();
  75. //String subject = subjectObject.getText().toString();
  76. String messageBody = messageBodyObject.getText().toString();
  77. /* TODO: add cc + bcc functionality */
  78. /* dosen't wotk cause Activity is not extendet and used as variable */
  79. /* button listeners */
  80. closeButton.setOnClickListener(new View.OnClickListener() {
  81. @Override
  82. public void onClick(View v) {
  83. String subject = subjectObject.getText().toString();
  84. String messageBody = messageBodyObject.getText().toString();
  85. /* give alert dialog box to user in case input fields are not empty */
  86. if (subject.isEmpty() && messageBody.isEmpty()) {
  87. dismiss();
  88. }
  89. else {
  90. /* setup dialog */
  91. AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
  92. alertDialogBuilder.setTitle("Warning");
  93. alertDialogBuilder
  94. .setMessage("Do you want to save your Draft?")
  95. .setCancelable(false)
  96. .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
  97. public void onClick(DialogInterface dialog, int id) {
  98. activity.setResult(RESULT_CANCELED, replyIntent);
  99. String from = sendingAddressObject.getText().toString();
  100. String to = receivingAddressObject.getText().toString();
  101. String subject = subjectObject.getText().toString();
  102. String message = messageBodyObject.getText().toString();
  103. String cc = ccObject.getText().toString();
  104. String bcc = bccObject.getText().toString();
  105. replyIntent.putExtra(EXTRA_FROM, from);
  106. replyIntent.putExtra(EXTRA_TO, to);
  107. replyIntent.putExtra(EXTRA_SUBJECT, subject);
  108. replyIntent.putExtra(EXTRA_MESSAGE, message);
  109. activity.setResult(RESULT_OK, replyIntent);
  110. activity.finish();
  111. Toast.makeText(getContext(), "messageCreateFragmentReadIn", Toast.LENGTH_SHORT).show();
  112. Toast.makeText(getContext(), replyIntent.getStringExtra(EXTRA_FROM), Toast.LENGTH_SHORT).show();
  113. Intent intent = new Intent(getContext(), NewDraftMessageActivity.class);
  114. startActivityForResult(intent, MainActivity.NEW_WORD_ACTIVITY_REQUEST_CODE);
  115. /*if this button is clicked, close the whole fragment */
  116. dismiss();
  117. }
  118. })
  119. .setNegativeButton("No",new DialogInterface.OnClickListener() {
  120. public void onClick(DialogInterface dialog,int id) {
  121. /* if this button is clicked, close the hole fragment */
  122. dismiss();
  123. }
  124. });
  125. /* create + show alert dialog */
  126. AlertDialog alertDialog = alertDialogBuilder.create();
  127. alertDialog.show();
  128. }
  129. }
  130. });
  131. attachButton.setOnClickListener(new View.OnClickListener() {
  132. @Override
  133. public void onClick(View v) {
  134. /* TODO: add file attachment functionality */
  135. }
  136. });
  137. dotButton.setOnClickListener(new View.OnClickListener() {
  138. @Override
  139. public void onClick(View v) {
  140. PopupMenu popupMenu = new PopupMenu(getActivity(), v);
  141. popupMenu.setOnMenuItemClickListener(messageCreateFragment.this::onMenuItemClick);
  142. popupMenu.inflate(R.menu.create_message_options_menu);
  143. popupMenu.show();
  144. }
  145. });
  146. sendButton.setOnClickListener(new View.OnClickListener() {
  147. @Override
  148. public void onClick(View v) {
  149. /* init vars, MAYBE NEEDED FOR LATER */
  150. String sendingAddress = sendingAddressObject.getText().toString();
  151. String receivingAddress = receivingAddressObject.getText().toString();
  152. String subject = subjectObject.getText().toString();
  153. String messageBody = messageBodyObject.getText().toString();
  154. String ccStr = ccObject.getText().toString();
  155. String bccStr = bccObject.getText().toString();
  156. /* check for valid input */
  157. if (MailFunctions.validateMessageBody(messageBodyObject) && MailFunctions.validateSubject(subjectObject) &&
  158. MailFunctions.validateEmail(receivingAddressObject) && MailFunctions.validateEmail(sendingAddressObject) &&
  159. !MailFunctions.checkForSameEmail(sendingAddressObject, receivingAddressObject)) {
  160. String password = preferences.getString("password","");
  161. MailFunctions.sendStarttlsMail("smtp.edubs.ch", sendingAddress, receivingAddress, password, messageBody, subject, ccStr, bccStr);
  162. Toast.makeText(getActivity(), "sending ... ", Toast.LENGTH_SHORT).show();
  163. dismiss();
  164. } else {
  165. Toast.makeText(getActivity(), "Please check your input", Toast.LENGTH_SHORT).show();
  166. }
  167. /* TODO: implement actual sending functionality */
  168. }
  169. });
  170. return view;
  171. }
  172. /* TODO: add useful functionality to the menu + consider not using Resource ID's in switch statement
  173. IDEAS:
  174. - safe to draft
  175. - clear all user input
  176. - change / check email signature
  177. - some email header hacking / options / customization
  178. - mail server probing
  179. - sending address spoofer ??
  180. */
  181. @Override
  182. public boolean onMenuItemClick(MenuItem item) {
  183. switch (item.getItemId()) {
  184. case R.id.create_message_delete:
  185. Toast.makeText(getActivity(), "item 1 clicked", Toast.LENGTH_LONG).show();
  186. return true;
  187. case R.id.create_message_spam:
  188. Toast.makeText(getActivity(), "item 2 clicked", Toast.LENGTH_LONG).show();
  189. return true;
  190. case R.id.create_message_move_to:
  191. Toast.makeText(getActivity(), "item 3 clicked", Toast.LENGTH_LONG).show();
  192. return true;
  193. case R.id.create_message_sent_to:
  194. Toast.makeText(getActivity(), "item 4 clicked", Toast.LENGTH_LONG).show();
  195. return true;
  196. default: /* this case should never occur */
  197. return false;
  198. }
  199. }
  200. }