Procházet zdrojové kódy

try out abstract coding + fix #1

Noah Vogt před 3 roky
rodič
revize
de87d51325

+ 9 - 8
app/src/main/java/com/noahvogt/snailmail/MainActivity.java

@@ -48,6 +48,7 @@ import com.noahvogt.snailmail.data.EmailViewModel;
 import com.noahvogt.snailmail.data.MailFunctions;
 import com.noahvogt.snailmail.workers.DownloadWorker;
 import com.noahvogt.snailmail.ui.show.MessageShowFragment;
+import com.noahvogt.snailmail.ui.editor.EditorFragment;
 
 import java.lang.reflect.Type;
 import java.text.SimpleDateFormat;
@@ -329,7 +330,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
         message_create_button.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                DialogFragment dialogFragment = MessageCreateFragment.newInstance();
+                DialogFragment dialogFragment = EditorFragment.newInstance();
                 dialogFragment.show(getSupportFragmentManager(), "tag");
             }
         });
@@ -342,7 +343,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
 
         /* gets the data from the Email writer and adds it to the Database */
         public void onActivityResult(int requestCode, int resultCode, Intent data) {
-            super.onActivityResult(requestCode, resultCode, MessageCreateFragment.replyIntent);
+            super.onActivityResult(requestCode, resultCode, EditorFragment.replyIntent);
 
             /* Creates class for the Date when Email is written */
             Date dNow = new Date();
@@ -350,13 +351,13 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
                     new SimpleDateFormat("dd.MM.yy");
 
                 Message word = new Message(userGlobal,
-                        MessageCreateFragment.replyIntent.getStringExtra(MessageCreateFragment.EXTRA_TO),
-                        MessageCreateFragment.replyIntent.getStringExtra(MessageCreateFragment.EXTRA_CC),
-                        MessageCreateFragment.replyIntent.getStringExtra(MessageCreateFragment.EXTRA_BCC),
-                        MessageCreateFragment.replyIntent.getStringExtra(MessageCreateFragment.EXTRA_FROM),
+                        EditorFragment.replyIntent.getStringExtra(EditorFragment.EXTRA_TO),
+                        EditorFragment.replyIntent.getStringExtra(EditorFragment.EXTRA_CC),
+                        EditorFragment.replyIntent.getStringExtra(EditorFragment.EXTRA_BCC),
+                        EditorFragment.replyIntent.getStringExtra(EditorFragment.EXTRA_FROM),
                         ft.format(dNow),
-                        MessageCreateFragment.replyIntent.getStringExtra(MessageCreateFragment.EXTRA_SUBJECT),
-                        MessageCreateFragment.replyIntent.getStringExtra(MessageCreateFragment.EXTRA_MESSAGE),
+                        EditorFragment.replyIntent.getStringExtra(EditorFragment.EXTRA_SUBJECT),
+                        EditorFragment.replyIntent.getStringExtra(EditorFragment.EXTRA_MESSAGE),
                         "Draft",false);
                 mEmailViewModel.insert(word);
         }

+ 93 - 0
app/src/main/java/com/noahvogt/snailmail/ui/editor/ButtonHandler.java

@@ -0,0 +1,93 @@
+package com.noahvogt.snailmail.ui.editor;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.SharedPreferences;
+import android.widget.EditText;
+import android.widget.Toast;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import com.noahvogt.snailmail.MailServerCredentials;
+import com.noahvogt.snailmail.data.MailFunctions;
+
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+
+public class ButtonHandler {
+
+    String jsonData;
+    ArrayList<MailServerCredentials> credentialsArrayList;
+    String smtpHost, password;
+    int smtpPort = 587;
+    String sendingAddress, receivingAddress, subject, messageBody, ccStr, bccStr;
+
+    public void handleSendButton(Activity activity, SharedPreferences credentialPreferences, Dialog dialog, String currentMailUser,
+                                 EditText sendingAddressObject, EditText receivingAddressObject, EditText subjectObject, EditText messageBodyObject,
+                                 EditText ccObject, EditText bccObject) {
+        getCredentialsJsonData(credentialPreferences);
+
+        if (jsonData.isEmpty()) {
+            Toast.makeText(activity, "Please setup an account before sending", Toast.LENGTH_SHORT).show();
+        } else {
+            getCredentials(currentMailUser);
+            getUserInput(sendingAddressObject, receivingAddressObject, subjectObject, messageBodyObject, ccObject, bccObject);
+
+            if (isValidMessage(messageBodyObject, subjectObject, receivingAddressObject, sendingAddressObject)) {
+                try {
+                    Toast.makeText(activity, "Sending ... ", Toast.LENGTH_SHORT).show();
+                    sendMessage(dialog);
+                } catch (com.chaquo.python.PyException pyException){
+                    Toast.makeText(activity, "Could not send message", Toast.LENGTH_SHORT).show();
+                }
+            } else {
+                Toast.makeText(activity, "Please check your input", Toast.LENGTH_SHORT).show();
+            }
+        }
+    }
+
+    public void getCredentialsJsonData(SharedPreferences credentials) {
+        jsonData = credentials.getString("data", "");
+    }
+
+    public void getCredentialsArraylist(String jsonData) {
+        Gson gson = new Gson();
+        Type credentialsType = new TypeToken<ArrayList<MailServerCredentials>>(){}.getType();
+        credentialsArrayList = gson.fromJson(jsonData, credentialsType);
+    }
+
+    public void getCredentials(String currentMailUser) {
+        getCredentialsArraylist(jsonData);
+
+        for (int i = 0; i < credentialsArrayList.size(); i++){
+            if (credentialsArrayList.get(i).getUsername().equals(currentMailUser)) {
+                smtpHost = credentialsArrayList.get(i).getSmtpHost();
+                smtpPort = credentialsArrayList.get(i).getSmtpPort();
+                password = credentialsArrayList.get(i).getPassword();
+                break;
+            }
+        }
+    }
+
+    public void getUserInput(EditText sendingAddressObject, EditText receivingAddressObject, EditText subjectObject,
+                             EditText messageBodyObject, EditText ccObject, EditText bccObject) {
+        sendingAddress = sendingAddressObject.getText().toString();
+        receivingAddress = receivingAddressObject.getText().toString();
+        subject = subjectObject.getText().toString();
+        messageBody = messageBodyObject.getText().toString();
+        ccStr = ccObject.getText().toString();
+        bccStr = bccObject.getText().toString();
+    }
+
+    public boolean isValidMessage(EditText messageBodyObject, EditText subjectObject, EditText receivingAddressObject,
+                                  EditText sendingAddressObject) {
+        return  MailFunctions.validateMessageBody(messageBodyObject) && MailFunctions.validateSubject(subjectObject) &&
+                MailFunctions.validateEmail(receivingAddressObject) && MailFunctions.validateEmail(sendingAddressObject);
+    }
+
+    public void sendMessage(Dialog dialog) {
+        MailFunctions.sendStarttlsMail(smtpHost, sendingAddress, receivingAddress, password, messageBody,
+                subject, ccStr, bccStr, smtpPort);
+        dialog.dismiss();
+    }
+}

+ 22 - 64
app/src/main/java/com/noahvogt/snailmail/MessageCreateFragment.java → app/src/main/java/com/noahvogt/snailmail/ui/editor/EditorFragment.java

@@ -1,4 +1,4 @@
-package com.noahvogt.snailmail;
+package com.noahvogt.snailmail.ui.editor;
 
 import android.app.Activity;
 import android.content.Context;
@@ -21,18 +21,16 @@ import androidx.annotation.Nullable;
 import androidx.appcompat.app.AlertDialog;
 import androidx.fragment.app.DialogFragment;
 
-import com.google.gson.Gson;
-import com.google.gson.reflect.TypeToken;
 import com.noahvogt.snailmail.DataBase.Message;
+import com.noahvogt.snailmail.MainActivity;
+import com.noahvogt.snailmail.NewDraftMessageActivity;
+import com.noahvogt.snailmail.R;
 import com.noahvogt.snailmail.data.EmailViewModel;
-import com.noahvogt.snailmail.data.MailFunctions;
 
-import java.lang.reflect.Type;
-import java.util.ArrayList;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
-public class MessageCreateFragment extends DialogFragment implements PopupMenu.OnMenuItemClickListener {
+public class EditorFragment 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";
@@ -58,14 +56,15 @@ public class MessageCreateFragment extends DialogFragment implements PopupMenu.O
     public Activity activity = new Activity();
     public static Intent replyIntent = new Intent();
 
-    public static MessageCreateFragment newInstance() {
-        return new MessageCreateFragment();
+    public static com.noahvogt.snailmail.ui.editor.EditorFragment newInstance() {
+        return new com.noahvogt.snailmail.ui.editor.EditorFragment();
     }
 
-    public MessageCreateFragment getMessage(Message message, EmailViewModel emailViewModel, MessageCreateFragment messageCreateFragment){
+    public com.noahvogt.snailmail.ui.editor.EditorFragment getMessage(Message message, EmailViewModel emailViewModel, 
+                                                                      com.noahvogt.snailmail.ui.editor.EditorFragment editorFragment) {
         this.mEmailViewModel = emailViewModel;
         this.mMessage = message;
-        return messageCreateFragment;
+        return editorFragment;
     }
 
     private AlertDialog dialog;
@@ -78,7 +77,7 @@ public class MessageCreateFragment extends DialogFragment implements PopupMenu.O
     @Override
     public void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        setStyle(DialogFragment.STYLE_NORMAL, R.style.messageCreateTheme);
+        setStyle(DialogFragment.STYLE_NORMAL, R.style.editorTheme);
     }
 
     @Nullable
@@ -93,15 +92,15 @@ public class MessageCreateFragment extends DialogFragment implements PopupMenu.O
         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);
+        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);
 
         SharedPreferences mailServerCredentials = getContext().getSharedPreferences("Credentials", Context.MODE_PRIVATE);
-        
+
         /* set logged in email address as sending address */
         String currentMailUser = mailServerCredentials.getString("currentUser", "");
         sendingAddressObject.setText(currentMailUser);
@@ -128,8 +127,7 @@ public class MessageCreateFragment extends DialogFragment implements PopupMenu.O
                 /* give alert dialog box to user in case input fields are not empty */
                 if (subject.isEmpty() && messageBody.isEmpty()) {
                     dismiss();
-                }
-                else {
+                } else {
                     /* setup dialog for saving draft message */
                     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
                     alertDialogBuilder.setTitle("Warning");
@@ -196,52 +194,12 @@ public class MessageCreateFragment extends DialogFragment implements PopupMenu.O
         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();
-
-                Gson gson = new Gson();
-
-                /* get string vars, MAYBE NOT HERE */
-                String jsonData = mailServerCredentials.getString("data", "");
-                Type credentialsType = new TypeToken<ArrayList<MailServerCredentials>>(){}.getType();
-                ArrayList<MailServerCredentials> allUsersCredentials = gson.fromJson(jsonData, credentialsType);
-                
-                String smtpHost = null, password = null; int smtpPort = 587;
-
-                for (int i = 0; i < allUsersCredentials.size(); i++) {
-                    if (allUsersCredentials.get(i).getUsername().equals(currentMailUser)) {
-                        smtpHost = allUsersCredentials.get(i).getSmtpHost();
-                        smtpPort = allUsersCredentials.get(i).getSmtpPort();
-                        password = allUsersCredentials.get(i).getPassword();
-                        break;
-                    }
-                }
-                
-                /* check for valid input */
-                if (MailFunctions.validateMessageBody(messageBodyObject) && MailFunctions.validateSubject(subjectObject) &&
-                MailFunctions.validateEmail(receivingAddressObject) && MailFunctions.validateEmail(sendingAddressObject)) {
-                    try {
-
-
-                        MailFunctions.sendStarttlsMail(smtpHost, sendingAddress, receivingAddress, password, messageBody,
-                                subject, ccStr, bccStr, smtpPort);
-                        Toast.makeText(getActivity(), "Sending ... ", Toast.LENGTH_SHORT).show();
-                        dismiss();
-                    }catch (com.chaquo.python.PyException pyException){
-                        Toast.makeText(getActivity(), "Could not send message", Toast.LENGTH_SHORT).show();
-                    }
-                } else {
-                    Toast.makeText(getActivity(), "Please check your input", Toast.LENGTH_SHORT).show();
-                }
+                ButtonHandler buttonHandler = new ButtonHandler();
+                buttonHandler.handleSendButton(getActivity(), mailServerCredentials, getDialog(), currentMailUser, sendingAddressObject,
+                                               receivingAddressObject, subjectObject, messageBodyObject, ccObject, bccObject);
             }
         });
 
-
         return view;
     }
 

+ 1 - 1
app/src/main/java/com/noahvogt/snailmail/ui/show/MessageShowFragment.java

@@ -50,7 +50,7 @@ public class MessageShowFragment extends DialogFragment implements PopupMenu.OnM
     @Override
     public void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        setStyle(DialogFragment.STYLE_NORMAL, R.style.messageCreateTheme);
+        setStyle(DialogFragment.STYLE_NORMAL, R.style.editorTheme);
     }
 
     @Nullable

+ 3 - 3
app/src/main/java/com/noahvogt/snailmail/ui/slideshow/DraftFragment.java

@@ -21,7 +21,7 @@ import com.noahvogt.snailmail.MainActivity;
 import com.noahvogt.snailmail.R;
 import com.noahvogt.snailmail.DataBase.Message;
 import com.noahvogt.snailmail.data.CustomAdapter;
-import com.noahvogt.snailmail.MessageCreateFragment;
+import com.noahvogt.snailmail.ui.editor.EditorFragment;
 
 import static com.noahvogt.snailmail.MainActivity.isDownloading;
 
@@ -67,11 +67,11 @@ public class  DraftFragment extends Fragment implements CustomAdapter.SelectedMe
 
     @Override
     public void selectedMessage(Message messages, EmailViewModel emailViewModel) {
-        MessageCreateFragment messageCreateFragment = new MessageCreateFragment();
+        EditorFragment editorFragment = new EditorFragment();
 
         //TODO: make this Fragment editable
         AppCompatActivity activity = (AppCompatActivity) getContext();
-        DialogFragment dialog = messageCreateFragment.getMessage(messages, emailViewModel, messageCreateFragment);
+        DialogFragment dialog = editorFragment.getMessage(messages, emailViewModel, editorFragment);
         dialog.show(activity.getSupportFragmentManager(), "tag");
     }
 }

+ 1 - 2
app/src/main/res/layout/message_create_fragment.xml

@@ -5,8 +5,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:id="@+id/messageFragment"
-    android:orientation="vertical"
-    tools:context=".MessageCreateFragment">
+    android:orientation="vertical">
 
     <androidx.cardview.widget.CardView
         android:id="@+id/cardView"

+ 1 - 1
app/src/main/res/values/style.xml

@@ -14,7 +14,7 @@
         <item name="color">@color/error_red</item>
     </style>
 
-    <style name="messageCreateTheme" parent="Theme.MaterialComponents.Light.DialogWhenLarge">
+    <style name="editorTheme" parent="Theme.MaterialComponents.Light.DialogWhenLarge">
         <item name="android:windowNoTitle">true</item>
         <item name="android:windowAnimationStyle">@style/Theme.AppCompat.Dialog</item>
     </style>