123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 |
- package com.noahvogt.miniprojekt;
- import android.app.Activity;
- import android.content.Context;
- import android.content.SharedPreferences;
- import android.content.DialogInterface;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.LayoutInflater;
- import android.view.MenuItem;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.EditText;
- import android.widget.ImageButton;
- import android.widget.PopupMenu;
- import android.widget.Toast;
- import androidx.annotation.NonNull;
- import androidx.annotation.Nullable;
- import androidx.appcompat.app.AlertDialog;
- import androidx.fragment.app.DialogFragment;
- import com.noahvogt.miniprojekt.DataBase.Message;
- import com.noahvogt.miniprojekt.data.EmailViewModel;
- import com.noahvogt.miniprojekt.data.MailFunctions;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- public class MessageCreateFragment extends DialogFragment implements PopupMenu.OnMenuItemClickListener {
- public static final String EXTRA_TO = "com.example.android.namelistsql.NAME";
- public static final String EXTRA_FROM = "com.example.android.namelistsql.FROM";
- public static final String EXTRA_SUBJECT = "com.example.android.namelistsql.SUBJECT";
- public static final String EXTRA_MESSAGE = "com.example.android.namelistsql.MESSAGE";
- public static final String EXTRA_CC = "com.example.android.namelistsql.CC";
- public static final String EXTRA_BCC = "com.example.android.namelistsql.BCC";
- public static final String EXTRA_DATE = "com.example.android.namelistsql.DATE";
- public EditText sendingAddressObject;
- public EditText receivingAddressObject;
- public EditText subjectObject;
- public EditText messageBodyObject;
- public EditText ccObject;
- public EditText bccObject;
- Message mMessage = null;
- public EmailViewModel mEmailViewModel = null;
- public static final int RESULT_CANCELED = 0;
- public static final int RESULT_OK = -1;
- public Activity activity = new Activity();
- public static Intent replyIntent = new Intent();
- public static MessageCreateFragment newInstance() {
- return new MessageCreateFragment();
- }
- public MessageCreateFragment getMessage(Message message, EmailViewModel emailViewModel, MessageCreateFragment messageCreateFragment){
- this.mEmailViewModel = emailViewModel;
- this.mMessage = message;
- return messageCreateFragment;
- }
- private AlertDialog dialog;
- SharedPreferences preferences;
- private static final int NUMBER_OF_THREADS = 4;
- static final ExecutorService databaseWriteExecutor =
- Executors.newFixedThreadPool(NUMBER_OF_THREADS);
- /* set theming style */
- @Override
- public void onCreate(@Nullable Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setStyle(DialogFragment.STYLE_NORMAL, R.style.messageCreateTheme);
- preferences = getActivity().getSharedPreferences("UserPreferences", Context.MODE_PRIVATE);
- }
- @Nullable
- @Override
- public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
- /* set and inflate layout */
- View view = inflater.inflate(R.layout.message_create_fragment, container, false);
- /* init vars */
- ImageButton closeButton = view.findViewById(R.id.create_message_close_button);
- final ImageButton sendButton = view.findViewById(R.id.create_message_send_button);
- ImageButton dotButton = view.findViewById(R.id.create_message_dots_button);
- ImageButton attachButton = view.findViewById(R.id.create_message_attach_button);
- sendingAddressObject = (EditText) view.findViewById(R.id.create_message_sending_address_text);
- receivingAddressObject = (EditText) view.findViewById(R.id.create_message_receiving_address_text);
- ccObject = (EditText) view.findViewById(R.id.create_message_cc_text);
- bccObject = (EditText) view.findViewById(R.id.create_message_bcc_text);
- subjectObject = (EditText) view.findViewById(R.id.create_message_subject_text);
- messageBodyObject = (EditText) view.findViewById(R.id.create_message_body_text);
- /* set logged in email address as sending address */
- String loginEmail = preferences.getString("email","");
- sendingAddressObject.setText(loginEmail);
- /* get string vars, MAYBE NOT HERE */
- if (mMessage != null) {
- sendingAddressObject.setText(mMessage.getFrom());
- receivingAddressObject.setText(mMessage.getTo());
- subjectObject.setText(mMessage.getSubject());
- messageBodyObject.setText(mMessage.getTextContent());
- bccObject.setText(mMessage.getBcc());
- ccObject.setText(mMessage.getCc());
- }
- /* TODO: add cc + bcc functionality */
- /* dosen't wotk cause Activity is not extendet and used as variable */
- /* button listeners */
- closeButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- String subject = subjectObject.getText().toString();
- String messageBody = messageBodyObject.getText().toString();
- /* give alert dialog box to user in case input fields are not empty */
- if (subject.isEmpty() && messageBody.isEmpty()) {
- dismiss();
- }
- else {
- /* setup dialog for saving draft message */
- AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
- alertDialogBuilder.setTitle("Warning");
- alertDialogBuilder
- .setMessage("Do you want to save your Draft?")
- .setCancelable(false)
- .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- activity.setResult(RESULT_CANCELED, replyIntent);
- String from = sendingAddressObject.getText().toString();
- String to = receivingAddressObject.getText().toString();
- String subject = subjectObject.getText().toString();
- String message = messageBodyObject.getText().toString();
- String cc = ccObject.getText().toString();
- String bcc = bccObject.getText().toString();
- replyIntent.putExtra(EXTRA_FROM, from);
- replyIntent.putExtra(EXTRA_TO, to);
- replyIntent.putExtra(EXTRA_CC, cc);
- replyIntent.putExtra(EXTRA_BCC, bcc);
- replyIntent.putExtra(EXTRA_SUBJECT, subject);
- replyIntent.putExtra(EXTRA_MESSAGE, message);
- activity.setResult(RESULT_OK, replyIntent);
- activity.finish();
- Intent intent = new Intent(getContext(), NewDraftMessageActivity.class);
- startActivityForResult(intent, MainActivity.NEW_WORD_ACTIVITY_REQUEST_CODE);
- /*if this button is clicked, close the whole fragment */
- dismiss();
- }
- })
- .setNegativeButton("No",new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog,int id) {
- /* if this button is clicked, close the hole fragment */
- dismiss();
- }
- });
- /* create + show alert dialog */
- AlertDialog alertDialog = alertDialogBuilder.create();
- alertDialog.show();
- }
- }
- });
- attachButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- /* TODO: add file attachment functionality */
- }
- });
- dotButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- PopupMenu popupMenu = new PopupMenu(getActivity(), v);
- popupMenu.setOnMenuItemClickListener(MessageCreateFragment.this::onMenuItemClick);
- popupMenu.inflate(R.menu.create_message_options_menu);
- popupMenu.show();
- }
- });
- sendButton.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- /* init vars, MAYBE NEEDED FOR LATER */
- String sendingAddress = sendingAddressObject.getText().toString();
- String receivingAddress = receivingAddressObject.getText().toString();
- String subject = subjectObject.getText().toString();
- String messageBody = messageBodyObject.getText().toString();
- String ccStr = ccObject.getText().toString();
- String bccStr = bccObject.getText().toString();
- /* check for valid input */
- if (MailFunctions.validateMessageBody(messageBodyObject) && MailFunctions.validateSubject(subjectObject) &&
- MailFunctions.validateEmail(receivingAddressObject) && MailFunctions.validateEmail(sendingAddressObject) &&
- !MailFunctions.checkForSameEmail(sendingAddressObject, receivingAddressObject)) {
- String password = preferences.getString("password","");
- MailFunctions.sendStarttlsMail("smtp.edubs.ch", sendingAddress, receivingAddress, password, messageBody, subject, ccStr, bccStr);
- Toast.makeText(getActivity(), "sending ... ", Toast.LENGTH_SHORT).show();
- dismiss();
- } else {
- Toast.makeText(getActivity(), "Please check your input", Toast.LENGTH_SHORT).show();
- }
- /* TODO: implement actual sending functionality */
- }
- });
- return view;
- }
- /* TODO: add useful functionality to the menu + consider not using Resource ID's in switch statement
- IDEAS:
- - safe to draft
- - clear all user input
- - change / check email signature
- - some email header hacking / options / customization
- - mail server probing
- - sending address spoofer ??
- */
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.create_message_delete:
- Toast.makeText(getActivity(), "item 1 clicked", Toast.LENGTH_LONG).show();
- return true;
- case R.id.create_message_spam:
- Toast.makeText(getActivity(), "item 2 clicked", Toast.LENGTH_LONG).show();
- return true;
- default: /* this case should never occur */
- return false;
- }
- }
- }
|