Forráskód Böngészése

major refactoring, replacing anonymous onClickListeners with lambda's + fix #36

Noah Vogt 3 éve
szülő
commit
7825b736e9
42 módosított fájl, 564 hozzáadás és 668 törlés
  1. 2 2
      app/src/main/AndroidManifest.xml
  2. 210 248
      app/src/main/java/com/noahvogt/snailmail/MainActivity.java
  3. 1 1
      app/src/main/java/com/noahvogt/snailmail/data/CustomAdapter.java
  4. 4 15
      app/src/main/java/com/noahvogt/snailmail/data/EmailViewHolder.java
  5. 2 3
      app/src/main/java/com/noahvogt/snailmail/data/EmailViewModel.java
  6. 9 9
      app/src/main/java/com/noahvogt/snailmail/data/MailServerCredentials.java
  7. 1 1
      app/src/main/java/com/noahvogt/snailmail/database/EmailRepository.java
  8. 1 3
      app/src/main/java/com/noahvogt/snailmail/database/EmailRoomDatabase.java
  9. 1 1
      app/src/main/java/com/noahvogt/snailmail/database/Message.java
  10. 1 2
      app/src/main/java/com/noahvogt/snailmail/database/MessageDao.java
  11. 0 93
      app/src/main/java/com/noahvogt/snailmail/ui/editor/ButtonHandler.java
  12. 171 0
      app/src/main/java/com/noahvogt/snailmail/ui/editor/EditorButtonHandler.java
  13. 63 127
      app/src/main/java/com/noahvogt/snailmail/ui/editor/EditorFragment.java
  14. 5 9
      app/src/main/java/com/noahvogt/snailmail/ui/editor/NewDraftMessageActivity.java
  15. 5 7
      app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/archiveFolder/ArchiveFragment.java
  16. 1 1
      app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/archiveFolder/ArchiveViewModel.java
  17. 7 14
      app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/draftFolder/DraftFragment.java
  18. 1 1
      app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/draftFolder/DraftViewModel.java
  19. 7 19
      app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/inboxFolder/InboxFragment.java
  20. 3 3
      app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/inboxFolder/InboxViewModel.java
  21. 7 13
      app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/sentFolder/SentFragment.java
  22. 3 3
      app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/sentFolder/SentViewModel.java
  23. 5 7
      app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/spamFolder/SpamFragment.java
  24. 1 1
      app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/spamFolder/SpamViewModel.java
  25. 23 53
      app/src/main/java/com/noahvogt/snailmail/ui/reader/ReaderFragment.java
  26. 3 3
      app/src/main/java/com/noahvogt/snailmail/ui/reader/ReaderViewModel.java
  27. 4 5
      app/src/main/java/com/noahvogt/snailmail/ui/settings/SettingsActivity.java
  28. 3 1
      app/src/main/java/com/noahvogt/snailmail/ui/settings/SettingsFragment.java
  29. 2 3
      app/src/main/java/com/noahvogt/snailmail/workers/DownloadWorker.java
  30. 0 0
      app/src/main/res/layout/add_email_popup.xml
  31. 0 0
      app/src/main/res/layout/editor_fragment.xml
  32. 1 1
      app/src/main/res/layout/mailbox_archive_fragment.xml
  33. 1 1
      app/src/main/res/layout/mailbox_draft_fragment.xml
  34. 1 1
      app/src/main/res/layout/mailbox_inbox_fragment.xml
  35. 1 1
      app/src/main/res/layout/mailbox_sent_fragment.xml
  36. 1 1
      app/src/main/res/layout/mailbox_spam_fragment.xml
  37. 0 0
      app/src/main/res/layout/main_activity.xml
  38. 0 0
      app/src/main/res/layout/new_user_welcome_message.xml
  39. 0 2
      app/src/main/res/layout/reader_cc_bcc_popup.xml
  40. 1 1
      app/src/main/res/layout/reader_fragment.xml
  41. 1 1
      app/src/main/res/layout/settings_activity.xml
  42. 11 11
      app/src/main/res/navigation/mobile_navigation.xml

+ 2 - 2
app/src/main/AndroidManifest.xml

@@ -10,7 +10,7 @@
         android:roundIcon="@mipmap/ic_launcher_round"
         android:supportsRtl="true"
         android:theme="@style/Theme.MiniProjekt">
-        <activity android:name=".NewDraftMessageActivity"></activity>
+        <activity android:name=".ui.editor.NewDraftMessageActivity"></activity>
         <activity
             android:name="com.noahvogt.snailmail.MainActivity"
             android:label="@string/app_name"
@@ -21,7 +21,7 @@
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
-        <activity android:name=".SettingsActivity"/>
+        <activity android:name=".ui.settings.SettingsActivity"/>
     </application>
 
 </manifest>

+ 210 - 248
app/src/main/java/com/noahvogt/snailmail/MainActivity.java

@@ -5,7 +5,6 @@ import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.os.Bundle;
-import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
@@ -25,10 +24,8 @@ import androidx.fragment.app.DialogFragment;
 
 import com.google.android.material.floatingactionbutton.FloatingActionButton;
 import com.google.gson.reflect.TypeToken;
-import com.noahvogt.snailmail.DataBase.Message;
+import com.noahvogt.snailmail.database.Message;
 
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentManager;
 import androidx.lifecycle.ViewModelProvider;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
@@ -46,15 +43,16 @@ import com.chaquo.python.android.AndroidPlatform;
 import com.noahvogt.snailmail.data.CustomAdapter;
 import com.noahvogt.snailmail.data.EmailViewModel;
 import com.noahvogt.snailmail.data.MailFunctions;
+import com.noahvogt.snailmail.data.MailServerCredentials;
+import com.noahvogt.snailmail.ui.settings.SettingsActivity;
 import com.noahvogt.snailmail.workers.DownloadWorker;
-import com.noahvogt.snailmail.ui.show.MessageShowFragment;
+import com.noahvogt.snailmail.ui.reader.ReaderFragment;
 import com.noahvogt.snailmail.ui.editor.EditorFragment;
 
 import java.lang.reflect.Type;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
-import java.util.List;
 
 import com.google.gson.Gson;
 
@@ -75,19 +73,14 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
     public static boolean isDownloading = false;
 
     private AlertDialog dialog;
-    private EditText newemail_name, newemail_email, newemail_password; /* may not be private */
+    private EditText newEmailName, newEmailAddress, newEmailPassword; /* may not be private */
 
     SharedPreferences mailServerCredentials;
 
-    /* leave descriptor empty */
-    public MainActivity() {}
-
-
-
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_main);
+        setContentView(R.layout.main_activity);
 
 
         /* invoke toolbar */
@@ -113,170 +106,161 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
 
         /* show account manager when clicking on profile */
         View accountView = findViewById(R.id.accountView);
-        accountView.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View onClickView) {
-                /* define dialog */
-                AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MainActivity.this);
-                final View accountManagerView = getLayoutInflater().inflate(R.layout.account_manager, null);
-
-                AutoCompleteTextView accountSelectorObject =
-                        (AutoCompleteTextView) accountManagerView.findViewById(R.id.accountSelectorTextView);
-
-                /* get string data for drop down menu */
-                SharedPreferences credReader = getSharedPreferences("Credentials", Context.MODE_PRIVATE);
-                String currentUser = credReader.getString("currentUser", "");
-
-                TextView showCurrentUserObject = (TextView) accountManagerView.findViewById(R.id.showCurrentUser);
-                Button switchAccountObject = (Button) accountManagerView.findViewById(R.id.switchToAccountButton);
-                Button deleteAccountObject = (Button) accountManagerView.findViewById(R.id.deleteAccountButton);
-                Button changeServerSettingsObject = (Button) accountManagerView.findViewById(R.id.changeServerSettingsButton);
-                Button exit = (Button) accountManagerView.findViewById(R.id.exitButton);
-
-                if (currentUser == null) {
-                    showCurrentUserObject.setText("current user:\nNone");
-                } else {
-                    showCurrentUserObject.setText(String.format("current user:\n%s", currentUser));
-                    userGlobal = currentUser;
+        accountView.setOnClickListener(onClickView -> {
+            /* define dialog */
+            AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MainActivity.this);
+            final View accountManagerView = getLayoutInflater().inflate(R.layout.account_manager, null);
+
+            AutoCompleteTextView accountSelectorObject = (AutoCompleteTextView) accountManagerView.findViewById(R.id.accountSelectorTextView);
+
+            /* get string data for drop down menu */
+            SharedPreferences credReader = getSharedPreferences("Credentials", Context.MODE_PRIVATE);
+            String currentUser = credReader.getString("currentUser", "");
+
+            TextView showCurrentUserObject = (TextView) accountManagerView.findViewById(R.id.showCurrentUser);
+            Button switchAccountObject = (Button) accountManagerView.findViewById(R.id.switchToAccountButton);
+            Button deleteAccountObject = (Button) accountManagerView.findViewById(R.id.deleteAccountButton);
+            Button changeServerSettingsObject = (Button) accountManagerView.findViewById(R.id.changeServerSettingsButton);
+            Button exit = (Button) accountManagerView.findViewById(R.id.exitButton);
+
+            if (currentUser == null) {
+                showCurrentUserObject.setText("current user:\nNone");
+            } else {
+                showCurrentUserObject.setText(String.format("current user:\n%s", currentUser));
+                userGlobal = currentUser;
+            }
+
+            SharedPreferences.Editor credEditor = credReader.edit();
+
+            Gson gson = new Gson();
+
+            String jsonCredData = credReader.getString("data", "");
+            Type credentialsType = new TypeToken<ArrayList<MailServerCredentials>>() {
+            }.getType();
+            ArrayList<MailServerCredentials> currentUsersCredentials = gson.fromJson(jsonCredData, credentialsType);
+            String[] userArray = new String[0];
+            try {
+                if (!currentUsersCredentials.isEmpty()) {
+                    userArray = new String[currentUsersCredentials.size()];
+                    for (int i = 0; i < currentUsersCredentials.size(); i++) {
+                        userArray[i] = currentUsersCredentials.get(i).getUsername();
+                    }
                 }
+            } catch (NullPointerException ignored) {}
 
-                SharedPreferences.Editor credEditor = credReader.edit();
+            ArrayAdapter<String> dropDownAdapter = new ArrayAdapter<>(getApplicationContext(), R.layout.dropdown_item,
+                    R.id.textViewDropDownItem, userArray);
+            accountSelectorObject.setAdapter(dropDownAdapter);
+
+            /* open dialog */
+            dialogBuilder.setView(accountManagerView);
+            AlertDialog rootAccountManagerDialog = dialogBuilder.create();
+            rootAccountManagerDialog.show();
+
+            switchAccountObject.setOnClickListener(view -> {
+                String userInput = accountSelectorObject.getText().toString();
+                String jsonCredData1 = credReader.getString("data", "");
+                Type credentialsType1 = new TypeToken<ArrayList<MailServerCredentials>>(){}.getType();
+                ArrayList<MailServerCredentials> currentUsersCredentials1 = gson.fromJson(jsonCredData1, credentialsType1);
 
-                Gson gson = new Gson();
 
-                String jsonCredData = credReader.getString("data", "");
-                Type credentialsType = new TypeToken<ArrayList<MailServerCredentials>>() {
-                }.getType();
-                ArrayList<MailServerCredentials> currentUsersCredentials = gson.fromJson(jsonCredData, credentialsType);
-                String[] userArray = new String[0];
                 try {
-                    if (!currentUsersCredentials.isEmpty()) {
-                        userArray = new String[currentUsersCredentials.size()];
-                        for (int i = 0; i < currentUsersCredentials.size(); i++) {
-                            userArray[i] = currentUsersCredentials.get(i).getUsername();
+                    for (int i = 0; i < currentUsersCredentials1.size(); i++) {
+                        if (currentUsersCredentials1.get(i).getUsername().equals(userInput)) {
+                            credEditor.putString("currentUser", userInput).apply();
+                            userGlobal = userInput;
+                            showCurrentUserObject.setText(String.format("current user:\n%s", userInput));
+                            showToast("Switched account");
+                            updateNavHeaderText(headerView);
+                            break;
                         }
                     }
                 } catch (NullPointerException ignored) {}
+            });
 
-                ArrayAdapter<String> dropDownAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.dropdown_item,
-                        R.id.textViewDropDownItem, userArray);
-                accountSelectorObject.setAdapter(dropDownAdapter);
-
-                /* open dialog */
-                dialogBuilder.setView(accountManagerView);
-                AlertDialog rootAccountManagerDialog = dialogBuilder.create();
-                rootAccountManagerDialog.show();
-
-                switchAccountObject.setOnClickListener(new View.OnClickListener() {
-                    @Override
-                    public void onClick(View view) {
-                        String userInput = accountSelectorObject.getText().toString();
-                        String jsonCredData = credReader.getString("data", "");
-                        Type credentialsType = new TypeToken<ArrayList<MailServerCredentials>>(){}.getType();
-                        ArrayList<MailServerCredentials> currentUsersCredentials = gson.fromJson(jsonCredData, credentialsType);
-
-
-                        try {
-                            for (int i = 0; i < currentUsersCredentials.size(); i++) {
-                                if (currentUsersCredentials.get(i).getUsername().equals(userInput)) {
-                                    credEditor.putString("currentUser", userInput).apply();
-                                    userGlobal = userInput;
-                                    showCurrentUserObject.setText(String.format("current user:\n%s", userInput));
-                                    showToast("Switched account");
-                                    updateNavHeaderText(headerView);
-                                    break;
-                                }
-                            }
-                        } catch (NullPointerException ignored) {}
-                    }
-                });
+            /* needed to use array in inner method later */
+            String[] finalUserArray = userArray;
 
-                /* needed to use array in inner method later */
-                String[] finalUserArray = userArray;
-
-                deleteAccountObject.setOnClickListener(new View.OnClickListener() {
-                    @Override
-                    public void onClick(View view) {
-                        String userInput = accountSelectorObject.getText().toString();
-                        String jsonCredData = credReader.getString("data", "");
-                        Type credentialsType = new TypeToken<ArrayList<MailServerCredentials>>(){}.getType();
-                        ArrayList<MailServerCredentials> currentUserCredentials = gson.fromJson(jsonCredData, credentialsType);
-
-
-                        try {
-                            for (int i = 0; i < currentUserCredentials.size(); i++) {
-                                if (currentUserCredentials.get(i).getUsername().equals(userInput)) {
-                                    currentUserCredentials.remove(i);
-
-                                    /* live update adapter for dropdown menu */
-                                    int k = 0;
-                                    String[] newUserArray = new String[finalUserArray.length - 1];
-                                    for (String s : finalUserArray) {
-                                        if (!s.contains(userInput)) {
-                                            newUserArray[k] = s;
-                                            k++;
-                                        }
-                                    }
-
-                                    ArrayAdapter<String> newDropDownAdapter = new ArrayAdapter<String>(getApplicationContext(),
-                                            R.layout.dropdown_item, R.id.textViewDropDownItem, newUserArray);
-                                    accountSelectorObject.setAdapter(newDropDownAdapter);
-
-                                    showCurrentUserObject.setText(R.string.NoEmailsInDropDownMenuAvailable);
-
-                                    /* update credentials strings */
-                                    credEditor.putString("data", gson.toJson(currentUserCredentials, credentialsType)).apply();
-                                    if (!currentUserCredentials.isEmpty()) {
-                                        String usernameZero = currentUserCredentials.get(0).getUsername();
-                                        credEditor.putString("currentUser", usernameZero).apply();
-                                        showCurrentUserObject.setText(String.format("current user:\n%s", usernameZero));
-                                        userGlobal = usernameZero;
-                                    } else {
-                                        credEditor.putString("currentUser", "").apply();
-                                        showCurrentUserObject.setText("current user:\n None");
-                                        userGlobal = null;
-                                    }
-                                    showToast("Account removed");
-                                    updateNavHeaderText(headerView);
-                                    break;
+            deleteAccountObject.setOnClickListener(view -> {
+                String userInput = accountSelectorObject.getText().toString();
+                String jsonCredData12 = credReader.getString("data", "");
+                Type credentialsType12 = new TypeToken<ArrayList<MailServerCredentials>>() {
+                }.getType();
+                ArrayList<MailServerCredentials> currentUserCredentials = gson.fromJson(jsonCredData12, credentialsType12);
+
+                try {
+                    for (int i = 0; i < currentUserCredentials.size(); i++) {
+                        if (currentUserCredentials.get(i).getUsername().equals(userInput)) {
+                            currentUserCredentials.remove(i);
+
+                            /* live update adapter for dropdown menu */
+                            int k = 0;
+                            String[] newUserArray = new String[finalUserArray.length - 1];
+                            for (String s : finalUserArray) {
+                                if (!s.contains(userInput)) {
+                                    newUserArray[k] = s;
+                                    k++;
                                 }
                             }
-                        } catch (NullPointerException ignored) {}
-                    }
-                });
 
-                changeServerSettingsObject.setOnClickListener(new View.OnClickListener() {
-                    @Override
-                    public void onClick(View view) {
-                        String userInput = accountSelectorObject.getText().toString();
-                        String jsonCredData = credReader.getString("data", "");
-                        Type credentialsType = new TypeToken<ArrayList<MailServerCredentials>>() {
-                        }.getType();
-                        ArrayList<MailServerCredentials> currentUserCredentials = gson.fromJson(jsonCredData, credentialsType);
-
-                        String email, name, password, smtpHost, imapHost = null;
-                        int smtpPort, imapPort = 0;
-                        try {
-                            for (int i = 0; i < currentUserCredentials.size(); i++) {
-                                if (currentUserCredentials.get(i).getUsername().equals(userInput)) {
-                                    email = currentUserCredentials.get(i).getUsername();
-                                    name = currentUserCredentials.get(i).getName();
-                                    password = currentUserCredentials.get(i).getPassword();
-                                    smtpHost = currentUserCredentials.get(i).getSmtpHost();
-                                    imapHost = currentUserCredentials.get(i).getImapHost();
-                                    smtpPort = currentUserCredentials.get(i).getSmtpPort();
-                                    imapPort = currentUserCredentials.get(i).getImapPort();
-                                    changeMailServerSettingsDialog(name, email, password, headerView, imapHost, smtpHost, imapPort,
-                                            smtpPort, false);
-                                    break;
-                                }
+                            ArrayAdapter<String> newDropDownAdapter = new ArrayAdapter<>(MainActivity.this.getApplicationContext(),
+                                    R.layout.dropdown_item, R.id.textViewDropDownItem, newUserArray);
+                            accountSelectorObject.setAdapter(newDropDownAdapter);
+
+                            showCurrentUserObject.setText(R.string.NoEmailsInDropDownMenuAvailable);
+
+                            /* update credentials strings */
+                            credEditor.putString("data", gson.toJson(currentUserCredentials, credentialsType12)).apply();
+                            if (!currentUserCredentials.isEmpty()) {
+                                String usernameZero = currentUserCredentials.get(0).getUsername();
+                                credEditor.putString("currentUser", usernameZero).apply();
+                                showCurrentUserObject.setText(String.format("current user:\n%s", usernameZero));
+                                userGlobal = usernameZero;
+                            } else {
+                                credEditor.putString("currentUser", "").apply();
+                                showCurrentUserObject.setText("current user:\n None");
+                                userGlobal = null;
                             }
-                        } catch (NullPointerException ignored) {}
+                            MainActivity.this.showToast("Account removed");
+                            MainActivity.this.updateNavHeaderText(headerView);
+                            break;
+                        }
                     }
-                });
+                } catch (NullPointerException ignored) {
+                }
+            });
+
+            changeServerSettingsObject.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View view) {
+                    String userInput = accountSelectorObject.getText().toString();
+                    String jsonCredData = credReader.getString("data", "");
+                    Type credentialsType = new TypeToken<ArrayList<MailServerCredentials>>() {
+                    }.getType();
+                    ArrayList<MailServerCredentials> currentUserCredentials = gson.fromJson(jsonCredData, credentialsType);
+
+                    String email, name, password, smtpHost, imapHost = null;
+                    int smtpPort, imapPort = 0;
+                    try {
+                        for (int i = 0; i < currentUserCredentials.size(); i++) {
+                            if (currentUserCredentials.get(i).getUsername().equals(userInput)) {
+                                email = currentUserCredentials.get(i).getUsername();
+                                name = currentUserCredentials.get(i).getName();
+                                password = currentUserCredentials.get(i).getPassword();
+                                smtpHost = currentUserCredentials.get(i).getSmtpHost();
+                                imapHost = currentUserCredentials.get(i).getImapHost();
+                                smtpPort = currentUserCredentials.get(i).getSmtpPort();
+                                imapPort = currentUserCredentials.get(i).getImapPort();
+                                changeMailServerSettingsDialog(name, email, password, headerView, imapHost, smtpHost, imapPort,
+                                        smtpPort, false);
+                                break;
+                            }
+                        }
+                    } catch (NullPointerException ignored) {}
+                }
+            });
 
-                exit.setOnClickListener(v -> rootAccountManagerDialog.dismiss());
-            }
+            exit.setOnClickListener(v -> rootAccountManagerDialog.dismiss());
         });
 
 
@@ -289,7 +273,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
         recyclerView.setAdapter(adapter);
         recyclerView.setLayoutManager(new LinearLayoutManager(this));
 
-        /* get Inbox Messages in Recyclerviewer at begining is overwritten by Fragments but has to stay*/
+        /* get Inbox Messages in RecycleViewer at beginning is overwritten by Fragments but has to stay*/
         mEmailViewModel = new ViewModelProvider(this).get(EmailViewModel.class);
         mEmailViewModel.getInboxMessage().observe(this, messages -> {
             /* Update the cached copy of the messages in the adapter*/
@@ -299,40 +283,31 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
         updateNavHeaderText(headerView);
 
         Button settingButton = findViewById(R.id.settingsButton);
-        settingButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                Intent i = new Intent(MainActivity.this, SettingsActivity.class);
-                startActivity(i);
-            }
+        settingButton.setOnClickListener(v -> {
+            Intent i = new Intent(MainActivity.this, SettingsActivity.class);
+            startActivity(i);
         });
 
         final Boolean[] clicked = {false};
         Button add_email_button = (Button) findViewById(R.id.addEmailButton);
-        add_email_button.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                if (!clicked[0]){
+        add_email_button.setOnClickListener(v -> {
+            if (!clicked[0]){
 
-                    createInformation(true,headerView);
-                    clicked[0] = true;
+                createInformation(true,headerView);
+                clicked[0] = true;
 
 
-                } else {
-                    createNewEmailDialog(headerView);
-                }
+            } else {
+                createNewEmailDialog(headerView);
             }
         });
 
 
         /* Start email Writer*/
         FloatingActionButton message_create_button = findViewById(R.id.messageButton);
-        message_create_button.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                DialogFragment dialogFragment = EditorFragment.newInstance();
-                dialogFragment.show(getSupportFragmentManager(), "tag");
-            }
+        message_create_button.setOnClickListener(v -> {
+            DialogFragment dialogFragment = EditorFragment.newInstance();
+            dialogFragment.show(getSupportFragmentManager(), "tag");
         });
 
         /* start python instance right on startup */
@@ -440,20 +415,17 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
         AlertDialog rootChangeServerSettingsDialog = dialogBuilder.create();
         rootChangeServerSettingsDialog.show();
 
-        saveButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                if (wantToAddNew) {
-                    addNewAccountCredentials(name, serverUsernameObject.getText().toString(), passwordObject.getText().toString(),
-                            Integer.parseInt(incomingPortObject.getText().toString()), Integer.parseInt(outgoingPortObject.getText().toString()),
-                            incomingServerObject.getText().toString(), outgoingServerObject.getText().toString(), rootChangeServerSettingsDialog, false,
-                            headerView);
-                } else {
-                    changeAccountCredentials(name, serverUsernameObject.getText().toString(),
-                            passwordObject.getText().toString(), Integer.parseInt(incomingPortObject.getText().toString()),
-                            Integer.parseInt(outgoingPortObject.getText().toString()), incomingServerObject.getText().toString(),
-                            outgoingServerObject.getText().toString(), rootChangeServerSettingsDialog, headerView, email);
-                }
+        saveButton.setOnClickListener(view -> {
+            if (wantToAddNew) {
+                addNewAccountCredentials(name, serverUsernameObject.getText().toString(), passwordObject.getText().toString(),
+                        Integer.parseInt(incomingPortObject.getText().toString()), Integer.parseInt(outgoingPortObject.getText().toString()),
+                        incomingServerObject.getText().toString(), outgoingServerObject.getText().toString(), rootChangeServerSettingsDialog, false,
+                        headerView);
+            } else {
+                changeAccountCredentials(name, serverUsernameObject.getText().toString(),
+                        passwordObject.getText().toString(), Integer.parseInt(incomingPortObject.getText().toString()),
+                        Integer.parseInt(outgoingPortObject.getText().toString()), incomingServerObject.getText().toString(),
+                        outgoingServerObject.getText().toString(), rootChangeServerSettingsDialog, headerView, email);
             }
         });
 
@@ -468,19 +440,15 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
         dialogBuilder.setTitle("failed to connect :(");
         dialogBuilder
                 .setMessage("Do you want to further customize your mail server settings?")
-                .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
-                    public void onClick(DialogInterface dialog, int id) {
-                        /*if this button is clicked, close the whole fragment */
-                        changeMailServerSettingsDialog(name, email, password, headerView,
-                                MailFunctions.getImapHostFromEmail(email), MailFunctions.getSmtpHostFromEmail(email), 993, 587,
-                                true);
-                    }
+                .setPositiveButton("Yes", (dialog, id) -> {
+                    /*if this button is clicked, close the whole fragment */
+                    changeMailServerSettingsDialog(name, email, password, headerView,
+                            MailFunctions.getImapHostFromEmail(email), MailFunctions.getSmtpHostFromEmail(email), 993, 587,
+                            true);
                 })
-                .setNegativeButton("No",new DialogInterface.OnClickListener() {
-                    public void onClick(DialogInterface dialogInput, int id) {
-                        /* if this button is clicked, close the hole fragment */
-                        dialogInput.dismiss();
-                    }
+                .setNegativeButton("No", (dialogInput, id) -> {
+                    /* if this button is clicked, close the hole fragment */
+                    dialogInput.dismiss();
                 });
         AlertDialog rootAskForChangeServerDialog = dialogBuilder.create();
         rootAskForChangeServerDialog.show();
@@ -488,7 +456,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
 
     public void createInformation(boolean button, View view){
         AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MainActivity.this);
-        final View emailPopupView = getLayoutInflater().inflate(R.layout.welcome, null);
+        final View emailPopupView = getLayoutInflater().inflate(R.layout.new_user_welcome_message, null);
 
         /* init text field variables */
         TextView shedText = emailPopupView.findViewById(R.id.background);
@@ -499,14 +467,11 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
         dialog = dialogBuilder.create();
         dialog.show();
 
-        okayButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                dialog.dismiss();
-                if (view!=null) {
-                    if (button) {
-                        createNewEmailDialog(view);
-                    }
+        okayButton.setOnClickListener(v -> {
+            dialog.dismiss();
+            if (view!=null) {
+                if (button) {
+                    createNewEmailDialog(view);
                 }
             }
         });
@@ -611,17 +576,17 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
     public void createNewEmailDialog(View headerView){
         /* define View window */
         AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
-        final View emailPopupView = getLayoutInflater().inflate(R.layout.popup, null);
+        final View emailPopupView = getLayoutInflater().inflate(R.layout.add_email_popup, null);
 
         /* init text field variables */
-        newemail_name = emailPopupView.findViewById(R.id.popup_material_name_asking_text);
-        newemail_email = emailPopupView.findViewById(R.id.popup_material_email_asking_text);
-        newemail_password = emailPopupView.findViewById(R.id.popup_material_password_asking_text);
+        newEmailName = emailPopupView.findViewById(R.id.popup_material_name_asking_text);
+        newEmailAddress = emailPopupView.findViewById(R.id.popup_material_email_asking_text);
+        newEmailPassword = emailPopupView.findViewById(R.id.popup_material_password_asking_text);
 
         /* init button variables */
-        Button newemail_save_button = (Button) emailPopupView.findViewById(R.id.saveButton);
+        Button newEmailSaveButton = (Button) emailPopupView.findViewById(R.id.saveButton);
         /* may not be private */
-        Button newemail_cancel_button = (Button) emailPopupView.findViewById(R.id.cancelButton);
+        Button newEmailCancelButton = (Button) emailPopupView.findViewById(R.id.cancelButton);
 
 
         /* open View window */
@@ -632,29 +597,27 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
         credentialsEditor = mailServerCredentials.edit();
 
         /* store user input */
-        newemail_save_button.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                /* store user input */
-                String name = newemail_name.getText().toString();
-                String email = newemail_email.getText().toString();
-                String password = newemail_password.getText().toString();
-
-                if (!MailFunctions.validateEmail(newemail_email) | !MailFunctions.validateName(newemail_name) | !MailFunctions.validatePassword(newemail_password)) {
-                    return;
-                }
+        newEmailSaveButton.setOnClickListener(v -> {
+            /* store user input */
+            String name = newEmailName.getText().toString();
+            String email = newEmailAddress.getText().toString();
+            String password = newEmailPassword.getText().toString();
+
+            if (!MailFunctions.validateEmail(newEmailAddress) | !MailFunctions.validateName(newEmailName) | !MailFunctions.validatePassword(newEmailPassword)) {
+                return;
+            }
 
-                boolean connection = addNewAccountCredentials(name, email, password, 993, 587, MailFunctions.getImapHostFromEmail(email),
-                        MailFunctions.getSmtpHostFromEmail(email), rootCreateNewEmailPopupDialog, true, headerView);
-                if (connection) {
-                    showToast("Downloading messages");
-                    mEmailViewModel.applyDownload();
-                    userGlobal = email;
-                }
-                dialog.dismiss();
-        }});
+            boolean connection = addNewAccountCredentials(name, email, password, 993, 587, MailFunctions.getImapHostFromEmail(email),
+                    MailFunctions.getSmtpHostFromEmail(email), rootCreateNewEmailPopupDialog, true, headerView);
+            if (connection) {
+                showToast("Downloading messages");
+                mEmailViewModel.applyDownload();
+                userGlobal = email;
+            }
+            dialog.dismiss();
+    });
 
-        newemail_cancel_button.setOnClickListener(v -> rootCreateNewEmailPopupDialog.dismiss());
+        newEmailCancelButton.setOnClickListener(v -> rootCreateNewEmailPopupDialog.dismiss());
     }
 
     /* print relatively globally messages at the bottom of the screen */
@@ -665,7 +628,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
 
     @Override
     public void selectedMessage(Message messages, EmailViewModel emailViewModel) {
-        DialogFragment dialog = MessageShowFragment.newInstance(messages, mEmailViewModel);
+        DialogFragment dialog = ReaderFragment.newInstance(messages, mEmailViewModel);
         dialog.show(getSupportFragmentManager(), "tag");
     }
 
@@ -692,5 +655,4 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
         }
         return false;
     }
-}
-
+}

+ 1 - 1
app/src/main/java/com/noahvogt/snailmail/data/CustomAdapter.java

@@ -19,7 +19,7 @@ import androidx.annotation.RequiresApi;
 import androidx.recyclerview.widget.DiffUtil;
 import androidx.recyclerview.widget.ListAdapter;
 
-import com.noahvogt.snailmail.DataBase.Message;
+import com.noahvogt.snailmail.database.Message;
 
 
 import java.util.List;

+ 4 - 15
app/src/main/java/com/noahvogt/snailmail/data/EmailViewHolder.java

@@ -9,9 +9,6 @@
 
 package com.noahvogt.snailmail.data;
 
-import android.annotation.SuppressLint;
-import android.content.Context;
-import android.os.Build;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -19,17 +16,12 @@ import android.view.ViewGroup;
 import android.widget.TextView;
 import android.widget.Toast;
 
-import com.noahvogt.snailmail.DataBase.Message;
-import com.noahvogt.snailmail.MainActivity;
+import com.noahvogt.snailmail.database.Message;
 import com.noahvogt.snailmail.R;
 
-import androidx.annotation.RequiresApi;
 import androidx.recyclerview.widget.RecyclerView;
 
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
 import java.util.List;
-import java.util.Locale;
 
 /* adds the content to the View of RecyclerView*/
 public class EmailViewHolder extends RecyclerView.ViewHolder {
@@ -81,13 +73,10 @@ public class EmailViewHolder extends RecyclerView.ViewHolder {
         messageItemView.setText(message);
     }
 
-    public static EmailViewHolder create(ViewGroup parent,
-                                         CustomAdapter.SelectedMessage selectedMessage,
-                                         List<Message> messageList) {
-         View view = LayoutInflater.from(parent.getContext())
-                .inflate(R.layout.fragment_home, parent, false);
+    public static EmailViewHolder create(ViewGroup parent, CustomAdapter.SelectedMessage selectedMessage, List<Message> messageList) {
+        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.mailbox_inbox_fragment, parent, false);
         return new EmailViewHolder(view, selectedMessage, messageList);
     }
-    }
+}
 
 

+ 2 - 3
app/src/main/java/com/noahvogt/snailmail/data/EmailViewModel.java

@@ -13,12 +13,11 @@ import android.app.Application;
 
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.AndroidViewModel;
-import androidx.work.Data;
 import androidx.work.OneTimeWorkRequest;
 import androidx.work.WorkManager;
 
-import com.noahvogt.snailmail.DataBase.EmailRepository;
-import com.noahvogt.snailmail.DataBase.Message;
+import com.noahvogt.snailmail.database.EmailRepository;
+import com.noahvogt.snailmail.database.Message;
 import com.noahvogt.snailmail.workers.DownloadWorker;
 
 import java.util.ArrayList;

+ 9 - 9
app/src/main/java/com/noahvogt/snailmail/MailServerCredentials.java → app/src/main/java/com/noahvogt/snailmail/data/MailServerCredentials.java

@@ -1,14 +1,14 @@
-package com.noahvogt.snailmail;
+package com.noahvogt.snailmail.data;
 
 public class MailServerCredentials {
-    private String mImapHost;
-    private String mSmtpHost;
-    private String mUsername;
-    private String mPassword;
-    private int mImapPort;
-    private int mSmtpPort;
-    private String mName;
-    private String mSignature;
+    private final String mImapHost;
+    private final String mSmtpHost;
+    private final String mUsername;
+    private final String mPassword;
+    private final int mImapPort;
+    private final int mSmtpPort;
+    private final String mName;
+    private final String mSignature;
 
     public String getImapHost () {return this.mImapHost;}
     public String getSmtpHost () {return this.mSmtpHost;}

+ 1 - 1
app/src/main/java/com/noahvogt/snailmail/DataBase/EmailRepository.java → app/src/main/java/com/noahvogt/snailmail/database/EmailRepository.java

@@ -7,7 +7,7 @@
  * which can be found in the file 'LICENSE' in the root directory of this repository.
  */
 
-package com.noahvogt.snailmail.DataBase;
+package com.noahvogt.snailmail.database;
 
 import android.app.Application;
 

+ 1 - 3
app/src/main/java/com/noahvogt/snailmail/DataBase/EmailRoomDatabase.java → app/src/main/java/com/noahvogt/snailmail/database/EmailRoomDatabase.java

@@ -7,10 +7,9 @@
  * which can be found in the file 'LICENSE' in the root directory of this repository.
  */
 
-package com.noahvogt.snailmail.DataBase;
+package com.noahvogt.snailmail.database;
 
 import android.content.Context;
-import android.widget.Toast;
 
 import androidx.annotation.NonNull;
 import androidx.room.Database;
@@ -19,7 +18,6 @@ import androidx.room.RoomDatabase;
 import androidx.room.migration.Migration;
 import androidx.sqlite.db.SupportSQLiteDatabase;
 
-import java.text.SimpleDateFormat;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 

+ 1 - 1
app/src/main/java/com/noahvogt/snailmail/DataBase/Message.java → app/src/main/java/com/noahvogt/snailmail/database/Message.java

@@ -7,7 +7,7 @@
  * which can be found in the file 'LICENSE' in the root directory of this repository.
  */
 
-package com.noahvogt.snailmail.DataBase;
+package com.noahvogt.snailmail.database;
 
 import androidx.annotation.NonNull;
 import androidx.room.ColumnInfo;

+ 1 - 2
app/src/main/java/com/noahvogt/snailmail/DataBase/MessageDao.java → app/src/main/java/com/noahvogt/snailmail/database/MessageDao.java

@@ -7,7 +7,7 @@
  * which can be found in the file 'LICENSE' in the root directory of this repository.
  */
 
-package com.noahvogt.snailmail.DataBase;
+package com.noahvogt.snailmail.database;
 
 import androidx.lifecycle.LiveData;
 import androidx.room.Dao;
@@ -15,7 +15,6 @@ import androidx.room.Delete;
 import androidx.room.Insert;
 import androidx.room.OnConflictStrategy;
 import androidx.room.Query;
-import androidx.room.Update;
 
 import java.util.List;
 

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

@@ -1,93 +0,0 @@
-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();
-    }
-}

+ 171 - 0
app/src/main/java/com/noahvogt/snailmail/ui/editor/EditorButtonHandler.java

@@ -0,0 +1,171 @@
+package com.noahvogt.snailmail.ui.editor;
+
+import static com.noahvogt.snailmail.ui.editor.EditorFragment.EXTRA_BCC;
+import static com.noahvogt.snailmail.ui.editor.EditorFragment.EXTRA_CC;
+import static com.noahvogt.snailmail.ui.editor.EditorFragment.EXTRA_FROM;
+import static com.noahvogt.snailmail.ui.editor.EditorFragment.EXTRA_MESSAGE;
+import static com.noahvogt.snailmail.ui.editor.EditorFragment.EXTRA_SUBJECT;
+import static com.noahvogt.snailmail.ui.editor.EditorFragment.EXTRA_TO;
+import static com.noahvogt.snailmail.ui.editor.EditorFragment.replyIntent;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.widget.EditText;
+import android.widget.Toast;
+
+import androidx.appcompat.app.AlertDialog;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+import com.noahvogt.snailmail.MainActivity;
+import com.noahvogt.snailmail.data.MailServerCredentials;
+import com.noahvogt.snailmail.data.MailFunctions;
+
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+
+public class EditorButtonHandler {
+
+    String jsonData;
+    ArrayList<MailServerCredentials> credentialsArrayList;
+    String smtpHost, password;
+    int smtpPort = 587;
+    String sendingAddress, receivingAddress, subject, messageBody, ccStr, bccStr;
+    public static final int RESULT_CANCELED = 0;
+    public static final int RESULT_OK = -1;
+
+    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 handleCloseButton(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())
+            dialog.dismiss();
+        else {
+            getUserInput(sendingAddressObject, receivingAddressObject, subjectObject, messageBodyObject, ccObject, bccObject);
+
+            /* give alert dialog box to user in case input fields are not empty */
+            if (subject.isEmpty() && messageBody.isEmpty()) {
+                dialog.dismiss();
+            } else {
+                askForSavingDraftMessageDialog(activity, dialog, sendingAddressObject, receivingAddressObject, subjectObject, messageBodyObject, ccObject, bccObject);
+            }
+        }
+    }
+
+        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();
+    }
+
+    public void askForSavingDraftMessageDialog(Activity activity, Dialog dialog, EditText sendingAddressObject, EditText receivingAddressObject, EditText subjectObject,
+                                       EditText messageBodyObject, EditText ccObject, EditText bccObject) {
+        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(activity);
+        alertDialogBuilder.setTitle("Warning");
+        alertDialogBuilder
+                .setMessage("Do you want to save your Draft?")
+                .setCancelable(false)
+                .setPositiveButton("Yes", (CloseDialog, id) -> {
+
+                    activity.setResult(RESULT_CANCELED, replyIntent);
+
+                    String from = sendingAddressObject.getText().toString();
+                    String to = receivingAddressObject.getText().toString();
+                    String subject1 = 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, subject1);
+                    replyIntent.putExtra(EXTRA_MESSAGE, message);
+                    activity.setResult(RESULT_OK, replyIntent);
+
+                    activity.finish();
+
+                    Intent intent = new Intent(activity, NewDraftMessageActivity.class);
+                    activity.startActivityForResult(intent, MainActivity.NEW_WORD_ACTIVITY_REQUEST_CODE);
+
+                    /* close the whole fragment */
+                    dialog.dismiss();
+                })
+                .setNegativeButton("No", (closeDialog, id) -> {
+                    /* if this button is clicked, close the hole fragment */
+                    dialog.dismiss();
+                });
+
+        /* create + show alert dialog */
+        AlertDialog alertDialog = alertDialogBuilder.create();
+        alertDialog.show();
+    }
+}

+ 63 - 127
app/src/main/java/com/noahvogt/snailmail/ui/editor/EditorFragment.java

@@ -1,11 +1,8 @@
 package com.noahvogt.snailmail.ui.editor;
 
-import android.app.Activity;
 import android.content.Context;
-import android.content.SharedPreferences;
-
-import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.MenuItem;
@@ -18,12 +15,9 @@ 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.snailmail.DataBase.Message;
-import com.noahvogt.snailmail.MainActivity;
-import com.noahvogt.snailmail.NewDraftMessageActivity;
+import com.noahvogt.snailmail.database.Message;
 import com.noahvogt.snailmail.R;
 import com.noahvogt.snailmail.data.EmailViewModel;
 
@@ -40,35 +34,27 @@ public class EditorFragment extends DialogFragment implements PopupMenu.OnMenuIt
     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;
+    public EditText sendingAddressObject, receivingAddressObject, subjectObject, messageBodyObject, ccObject, bccObject;
+    public ImageButton sendButton, closeButton, dotButton, attachButton;
+    public SharedPreferences mailServerCredentials;
+    public String currentMailUser;
 
-    Message mMessage = null;
+    public 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 com.noahvogt.snailmail.ui.editor.EditorFragment newInstance() {
         return new com.noahvogt.snailmail.ui.editor.EditorFragment();
     }
 
-    public com.noahvogt.snailmail.ui.editor.EditorFragment getMessage(Message message, EmailViewModel emailViewModel, 
+    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 editorFragment;
     }
 
-    private AlertDialog dialog;
-
     private static final int NUMBER_OF_THREADS = 4;
     static final ExecutorService databaseWriteExecutor =
             Executors.newFixedThreadPool(NUMBER_OF_THREADS);
@@ -83,121 +69,33 @@ public class EditorFragment extends DialogFragment implements PopupMenu.OnMenuIt
     @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);
+        View view = inflater.inflate(R.layout.editor_fragment, container, false);
 
-        SharedPreferences mailServerCredentials = getContext().getSharedPreferences("Credentials", Context.MODE_PRIVATE);
+        getPreferences(requireContext());
+        getCurrentUser();
 
-        /* set logged in email address as sending address */
-        String currentMailUser = mailServerCredentials.getString("currentUser", "");
-        sendingAddressObject.setText(currentMailUser);
+        initButtonObjects(view);
+        initUserInputObjects(view);
 
-        /* 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());
-        }
+        setFromAddressToLoggedInUser();
+        applyMessageObjectToUI();
 
-        /* TODO: add cc + bcc functionality */
-
-        /* 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);
-
-                                    /* 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();
-                }
-            }
+        closeButton.setOnClickListener(v -> {
+            EditorButtonHandler editorButtonHandler = new EditorButtonHandler();
+            editorButtonHandler.handleCloseButton(getActivity(), mailServerCredentials, getDialog(), currentMailUser, sendingAddressObject,
+                    receivingAddressObject, subjectObject, messageBodyObject, ccObject, bccObject);
         });
 
-        attachButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                /* TODO: add file attachment functionality */
-            }
+        attachButton.setOnClickListener(v -> {
         });
 
-        dotButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-            }
+        dotButton.setOnClickListener(v -> {
         });
 
-        sendButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                ButtonHandler buttonHandler = new ButtonHandler();
-                buttonHandler.handleSendButton(getActivity(), mailServerCredentials, getDialog(), currentMailUser, sendingAddressObject,
-                                               receivingAddressObject, subjectObject, messageBodyObject, ccObject, bccObject);
-            }
+        sendButton.setOnClickListener(v -> {
+            EditorButtonHandler editorButtonHandler = new EditorButtonHandler();
+            editorButtonHandler.handleSendButton(getActivity(), mailServerCredentials, getDialog(), currentMailUser, sendingAddressObject,
+                    receivingAddressObject, subjectObject, messageBodyObject, ccObject, bccObject);
         });
 
         return view;
@@ -225,4 +123,42 @@ public class EditorFragment extends DialogFragment implements PopupMenu.OnMenuIt
                 return false;
         }
     }
+
+    public void initUserInputObjects(View view) {
+        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);
+    }
+
+    public void initButtonObjects(View view) {
+        closeButton = view.findViewById(R.id.create_message_close_button);
+        sendButton = view.findViewById(R.id.create_message_send_button);
+        dotButton = view.findViewById(R.id.create_message_dots_button);
+        attachButton = view.findViewById(R.id.create_message_attach_button);
+    }
+
+    public void setFromAddressToLoggedInUser() {
+        sendingAddressObject.setText(currentMailUser);
+    }
+    public void getCurrentUser() {
+        currentMailUser = mailServerCredentials.getString("currentUser", "");
+    }
+
+    public void getPreferences(Context context) {
+        mailServerCredentials = context.getSharedPreferences("Credentials", Context.MODE_PRIVATE);
+    }
+
+    public void applyMessageObjectToUI () {
+        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());
+        }
+    }
 }

+ 5 - 9
app/src/main/java/com/noahvogt/snailmail/NewDraftMessageActivity.java → app/src/main/java/com/noahvogt/snailmail/ui/editor/NewDraftMessageActivity.java

@@ -7,25 +7,21 @@
  * which can be found in the file 'LICENSE' in the root directory of this repository.
  */
 
-package com.noahvogt.snailmail;
+package com.noahvogt.snailmail.ui.editor;
 
 
+import android.os.Bundle;
+
 import androidx.appcompat.app.AppCompatActivity;
 
-import android.content.Intent;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.EditText;
-import android.widget.ImageButton;
-import android.widget.Toast;
+import com.noahvogt.snailmail.R;
 
 public class NewDraftMessageActivity extends AppCompatActivity {
 
    @Override
     public void onCreate(Bundle savedInstanceState){
         super.onCreate(savedInstanceState);
-        setContentView(R.layout.fragment_home);
+        setContentView(R.layout.mailbox_inbox_fragment);
 
        NewDraftMessageActivity.this.finish();
         }

+ 5 - 7
app/src/main/java/com/noahvogt/snailmail/ui/archive/ArchiveFragment.java → app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/archiveFolder/ArchiveFragment.java

@@ -1,4 +1,4 @@
-package com.noahvogt.snailmail.ui.archive;
+package com.noahvogt.snailmail.ui.mailboxes.archiveFolder;
 
 import android.os.Bundle;
 import android.view.LayoutInflater;
@@ -7,20 +7,18 @@ import android.view.ViewGroup;
 import android.widget.TextView;
 
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.fragment.app.DialogFragment;
 import androidx.fragment.app.Fragment;
-import androidx.lifecycle.Observer;
 import androidx.lifecycle.ViewModelProvider;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.noahvogt.snailmail.MainActivity;
 import com.noahvogt.snailmail.R;
-import com.noahvogt.snailmail.DataBase.Message;
+import com.noahvogt.snailmail.database.Message;
 import com.noahvogt.snailmail.data.CustomAdapter;
-import com.noahvogt.snailmail.ui.show.MessageShowFragment;
+import com.noahvogt.snailmail.ui.reader.ReaderFragment;
 import com.noahvogt.snailmail.data.EmailViewModel;
 
 import static com.noahvogt.snailmail.MainActivity.isDownloading;
@@ -58,7 +56,7 @@ public class ArchiveFragment extends Fragment implements CustomAdapter.SelectedM
 
         archiveViewModel =
                 new ViewModelProvider(this).get(ArchiveViewModel.class);
-        View root = inflater.inflate(R.layout.fragment_archive, container, false);
+        View root = inflater.inflate(R.layout.mailbox_archive_fragment, container, false);
         final TextView textView = root.findViewById(R.id.text_archive);
         return root;
 
@@ -72,7 +70,7 @@ public class ArchiveFragment extends Fragment implements CustomAdapter.SelectedM
     public void selectedMessage(Message messages, EmailViewModel emailViewModel) {
 
         AppCompatActivity activity = (AppCompatActivity) getContext();
-        DialogFragment dialog = MessageShowFragment.newInstance(messages, mEmailViewModel);
+        DialogFragment dialog = ReaderFragment.newInstance(messages, mEmailViewModel);
         dialog.show(activity.getSupportFragmentManager(), "tag");
     }
 }

+ 1 - 1
app/src/main/java/com/noahvogt/snailmail/ui/archive/ArchiveViewModel.java → app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/archiveFolder/ArchiveViewModel.java

@@ -1,4 +1,4 @@
-package com.noahvogt.snailmail.ui.archive;
+package com.noahvogt.snailmail.ui.mailboxes.archiveFolder;
 
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.MutableLiveData;

+ 7 - 14
app/src/main/java/com/noahvogt/snailmail/ui/slideshow/DraftFragment.java → app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/draftFolder/DraftFragment.java

@@ -1,4 +1,4 @@
-package com.noahvogt.snailmail.ui.slideshow;
+package com.noahvogt.snailmail.ui.mailboxes.draftFolder;
 
 import android.os.Bundle;
 import android.view.LayoutInflater;
@@ -7,11 +7,9 @@ import android.view.ViewGroup;
 import android.widget.TextView;
 
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.fragment.app.DialogFragment;
 import androidx.fragment.app.Fragment;
-import androidx.lifecycle.Observer;
 import androidx.lifecycle.ViewModelProvider;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
@@ -19,24 +17,21 @@ import androidx.recyclerview.widget.RecyclerView;
 import com.noahvogt.snailmail.data.EmailViewModel;
 import com.noahvogt.snailmail.MainActivity;
 import com.noahvogt.snailmail.R;
-import com.noahvogt.snailmail.DataBase.Message;
+import com.noahvogt.snailmail.database.Message;
 import com.noahvogt.snailmail.data.CustomAdapter;
 import com.noahvogt.snailmail.ui.editor.EditorFragment;
 
 import static com.noahvogt.snailmail.MainActivity.isDownloading;
 
-public class  DraftFragment extends Fragment implements CustomAdapter.SelectedMessage{
+public class  DraftFragment extends Fragment implements CustomAdapter.SelectedMessage {
 
-   private DraftViewModel draftViewModel;
-   EmailViewModel mEmailViewModel;
+    EmailViewModel mEmailViewModel;
    RecyclerView recyclerView;
 
-
     public View onCreateView(@NonNull LayoutInflater inflater,
                              ViewGroup container, Bundle savedInstanceState) {
 
 
-
         recyclerView = MainActivity.recyclerView.findViewById(R.id.recyclerView);
 
         final CustomAdapter adapter = new CustomAdapter(new CustomAdapter.EmailDiff(), this);
@@ -57,9 +52,8 @@ public class  DraftFragment extends Fragment implements CustomAdapter.SelectedMe
 
         });
 
-        draftViewModel =
-                new ViewModelProvider(this).get(DraftViewModel.class);
-        View root = inflater.inflate(R.layout.fragment_slideshow, container, false);
+        DraftViewModel draftViewModel = new ViewModelProvider(this).get(DraftViewModel.class);
+        View root = inflater.inflate(R.layout.mailbox_draft_fragment, container, false);
         final TextView textView = root.findViewById(R.id.text_slideshow);
         return root;
     }
@@ -74,5 +68,4 @@ public class  DraftFragment extends Fragment implements CustomAdapter.SelectedMe
         DialogFragment dialog = editorFragment.getMessage(messages, emailViewModel, editorFragment);
         dialog.show(activity.getSupportFragmentManager(), "tag");
     }
-}
-
+}

+ 1 - 1
app/src/main/java/com/noahvogt/snailmail/ui/slideshow/DraftViewModel.java → app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/draftFolder/DraftViewModel.java

@@ -1,4 +1,4 @@
-package com.noahvogt.snailmail.ui.slideshow;
+package com.noahvogt.snailmail.ui.mailboxes.draftFolder;
 
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.MutableLiveData;

+ 7 - 19
app/src/main/java/com/noahvogt/snailmail/ui/home/HomeFragment.java → app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/inboxFolder/InboxFragment.java

@@ -1,19 +1,16 @@
-package com.noahvogt.snailmail.ui.home;
+package com.noahvogt.snailmail.ui.mailboxes.inboxFolder;
 
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.TextView;
-import android.widget.Toast;
 
 
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.fragment.app.DialogFragment;
 import androidx.fragment.app.Fragment;
-import androidx.lifecycle.Observer;
 import androidx.lifecycle.ViewModelProvider;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
@@ -21,26 +18,19 @@ import androidx.recyclerview.widget.RecyclerView;
 import com.noahvogt.snailmail.data.CustomAdapter;
 import com.noahvogt.snailmail.MainActivity;
 import com.noahvogt.snailmail.R;
-import com.noahvogt.snailmail.DataBase.Message;
-import com.noahvogt.snailmail.ui.show.MessageShowFragment;
+import com.noahvogt.snailmail.database.Message;
+import com.noahvogt.snailmail.ui.reader.ReaderFragment;
 import com.noahvogt.snailmail.data.EmailViewModel;
 
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-
 import static com.noahvogt.snailmail.MainActivity.isDownloading;
 
-public class HomeFragment extends Fragment implements CustomAdapter.SelectedMessage{
+public class InboxFragment extends Fragment implements CustomAdapter.SelectedMessage{
 
-    private HomeViewModel homeViewModel;
     EmailViewModel mEmailViewModel;
     RecyclerView recyclerView;
 
     public View onCreateView(@NonNull LayoutInflater inflater,
                              ViewGroup container, Bundle savedInstanceState) {
-
-
-
         recyclerView = MainActivity.recyclerView.findViewById(R.id.recyclerView);
 
         final CustomAdapter adapter = new CustomAdapter(new CustomAdapter.EmailDiff(), this);
@@ -60,10 +50,8 @@ public class HomeFragment extends Fragment implements CustomAdapter.SelectedMess
         });
 
 
-
-        homeViewModel =
-                new ViewModelProvider(this).get(HomeViewModel.class);
-        View root = inflater.inflate(R.layout.fragment_home, container, false);
+        InboxViewModel inboxViewModel = new ViewModelProvider(this).get(InboxViewModel.class);
+        View root = inflater.inflate(R.layout.mailbox_inbox_fragment, container, false);
         final TextView textView = root.findViewById(R.id.textView);
         return root;
     }
@@ -73,7 +61,7 @@ public class HomeFragment extends Fragment implements CustomAdapter.SelectedMess
     public void selectedMessage(Message messages, EmailViewModel emailViewModel) {
 
         AppCompatActivity activity = (AppCompatActivity) getContext();
-        DialogFragment dialog = MessageShowFragment.newInstance(messages,mEmailViewModel );
+        DialogFragment dialog = ReaderFragment.newInstance(messages,mEmailViewModel );
         dialog.show(activity.getSupportFragmentManager(), "tag");
 
     }

+ 3 - 3
app/src/main/java/com/noahvogt/snailmail/ui/home/HomeViewModel.java → app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/inboxFolder/InboxViewModel.java

@@ -1,14 +1,14 @@
-package com.noahvogt.snailmail.ui.home;
+package com.noahvogt.snailmail.ui.mailboxes.inboxFolder;
 
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.MutableLiveData;
 import androidx.lifecycle.ViewModel;
 
-public class HomeViewModel extends ViewModel {
+public class InboxViewModel extends ViewModel {
 
     private MutableLiveData<String> mText;
 
-    public HomeViewModel() {
+    public InboxViewModel() {
         mText = new MutableLiveData<>();
         mText.setValue("This is home fragment");
     }

+ 7 - 13
app/src/main/java/com/noahvogt/snailmail/ui/gallery/GalleryFragment.java → app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/sentFolder/SentFragment.java

@@ -1,35 +1,29 @@
-package com.noahvogt.snailmail.ui.gallery;
+package com.noahvogt.snailmail.ui.mailboxes.sentFolder;
 
 import android.os.Bundle;
 import android.view.LayoutInflater;
-import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.TextView;
-import android.widget.Toast;
 
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.fragment.app.DialogFragment;
 import androidx.fragment.app.Fragment;
-import androidx.lifecycle.Observer;
 import androidx.lifecycle.ViewModelProvider;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.noahvogt.snailmail.MainActivity;
 import com.noahvogt.snailmail.R;
-import com.noahvogt.snailmail.DataBase.Message;
+import com.noahvogt.snailmail.database.Message;
 import com.noahvogt.snailmail.data.CustomAdapter;
-import com.noahvogt.snailmail.ui.show.MessageShowFragment;
+import com.noahvogt.snailmail.ui.reader.ReaderFragment;
 import com.noahvogt.snailmail.data.EmailViewModel;
 
-import org.jetbrains.annotations.NotNull;
-
 import static com.noahvogt.snailmail.MainActivity.isDownloading;
 
-public class GalleryFragment extends Fragment implements CustomAdapter.SelectedMessage{
+public class SentFragment extends Fragment implements CustomAdapter.SelectedMessage{
 
     EmailViewModel mEmailViewModel;
     RecyclerView recyclerView;
@@ -41,8 +35,8 @@ public class GalleryFragment extends Fragment implements CustomAdapter.SelectedM
 
        // mEmailViewModel.deleteNewMessage();
 
-        GalleryViewModel galleryViewModel = new ViewModelProvider(this).get(GalleryViewModel.class);
-        View root = inflater.inflate(R.layout.fragment_gallery, container, false);
+        SentViewModel sentViewModel = new ViewModelProvider(this).get(SentViewModel.class);
+        View root = inflater.inflate(R.layout.mailbox_sent_fragment, container, false);
         final TextView textView = root.findViewById(R.id.text_gallery);
 
         recyclerView = MainActivity.recyclerView.findViewById(R.id.recyclerView);
@@ -73,7 +67,7 @@ public class GalleryFragment extends Fragment implements CustomAdapter.SelectedM
     @Override
     public void selectedMessage(Message messages, EmailViewModel emailViewModel) {
         AppCompatActivity activity = (AppCompatActivity) getContext();
-        DialogFragment dialog = MessageShowFragment.newInstance(messages, mEmailViewModel);
+        DialogFragment dialog = ReaderFragment.newInstance(messages, mEmailViewModel);
         dialog.show(activity.getSupportFragmentManager(), "tag");
 
     }

+ 3 - 3
app/src/main/java/com/noahvogt/snailmail/ui/gallery/GalleryViewModel.java → app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/sentFolder/SentViewModel.java

@@ -1,14 +1,14 @@
-package com.noahvogt.snailmail.ui.gallery;
+package com.noahvogt.snailmail.ui.mailboxes.sentFolder;
 
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.MutableLiveData;
 import androidx.lifecycle.ViewModel;
 
-public class GalleryViewModel extends ViewModel {
+public class SentViewModel extends ViewModel {
 
     private MutableLiveData<String> mText;
 
-    public GalleryViewModel() {
+    public SentViewModel() {
         mText = new MutableLiveData<>();
         mText.setValue("This is gallery fragment");
     }

+ 5 - 7
app/src/main/java/com/noahvogt/snailmail/ui/spam/SpamFragment.java → app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/spamFolder/SpamFragment.java

@@ -1,4 +1,4 @@
-package com.noahvogt.snailmail.ui.spam;
+package com.noahvogt.snailmail.ui.mailboxes.spamFolder;
 
 import android.os.Bundle;
 import android.view.LayoutInflater;
@@ -7,20 +7,18 @@ import android.view.ViewGroup;
 import android.widget.TextView;
 
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 import androidx.fragment.app.DialogFragment;
 import androidx.fragment.app.Fragment;
-import androidx.lifecycle.Observer;
 import androidx.lifecycle.ViewModelProvider;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
 import com.noahvogt.snailmail.MainActivity;
 import com.noahvogt.snailmail.R;
-import com.noahvogt.snailmail.DataBase.Message;
+import com.noahvogt.snailmail.database.Message;
 import com.noahvogt.snailmail.data.CustomAdapter;
-import com.noahvogt.snailmail.ui.show.MessageShowFragment;
+import com.noahvogt.snailmail.ui.reader.ReaderFragment;
 import com.noahvogt.snailmail.data.EmailViewModel;
 
 import static com.noahvogt.snailmail.MainActivity.isDownloading;
@@ -60,7 +58,7 @@ public class SpamFragment extends Fragment implements CustomAdapter.SelectedMess
 
         spamViewModel =
                 new ViewModelProvider(this).get(SpamViewModel.class);
-        View root = inflater.inflate(R.layout.fragment_spam, container, false);
+        View root = inflater.inflate(R.layout.mailbox_spam_fragment, container, false);
         final TextView textView = root.findViewById(R.id.text_spam);
         return root;
 
@@ -73,7 +71,7 @@ public class SpamFragment extends Fragment implements CustomAdapter.SelectedMess
     public void selectedMessage(Message messages, EmailViewModel emailViewModel) {
 
         AppCompatActivity activity = (AppCompatActivity) getContext();
-        DialogFragment dialog = MessageShowFragment.newInstance(messages, mEmailViewModel);
+        DialogFragment dialog = ReaderFragment.newInstance(messages, mEmailViewModel);
         dialog.show(activity.getSupportFragmentManager(), "tag");
     }
 }

+ 1 - 1
app/src/main/java/com/noahvogt/snailmail/ui/spam/SpamViewModel.java → app/src/main/java/com/noahvogt/snailmail/ui/mailboxes/spamFolder/SpamViewModel.java

@@ -1,4 +1,4 @@
-package com.noahvogt.snailmail.ui.spam;
+package com.noahvogt.snailmail.ui.mailboxes.spamFolder;
 
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.MutableLiveData;

+ 23 - 53
app/src/main/java/com/noahvogt/snailmail/ui/show/MessageShowFragment.java → app/src/main/java/com/noahvogt/snailmail/ui/reader/ReaderFragment.java

@@ -1,4 +1,4 @@
-package com.noahvogt.snailmail.ui.show;
+package com.noahvogt.snailmail.ui.reader;
 
 
 import android.app.AlertDialog;
@@ -20,13 +20,11 @@ import androidx.lifecycle.Observer;
 import androidx.lifecycle.ViewModelProvider;
 
 import com.noahvogt.snailmail.R;
-import com.noahvogt.snailmail.DataBase.Message;
+import com.noahvogt.snailmail.database.Message;
 import com.noahvogt.snailmail.data.EmailViewModel;
 
 
-public class MessageShowFragment extends DialogFragment implements PopupMenu.OnMenuItemClickListener {
-
-
+public class ReaderFragment extends DialogFragment implements PopupMenu.OnMenuItemClickListener {
     public TextView showTo;
     public TextView showFrom;
     public TextView showSubject;
@@ -39,12 +37,10 @@ public class MessageShowFragment extends DialogFragment implements PopupMenu.OnM
     private static Message mCurrent;
     private static EmailViewModel mEmailViewModel;
 
-    public static MessageShowFragment newInstance(Message current, EmailViewModel emailViewModel) {
+    public static ReaderFragment newInstance(Message current, EmailViewModel emailViewModel) {
         mEmailViewModel = emailViewModel;
         mCurrent = current;
-        return new MessageShowFragment();}
-
-
+        return new ReaderFragment();}
 
     /* set theming style */
     @Override
@@ -53,17 +49,16 @@ public class MessageShowFragment extends DialogFragment implements PopupMenu.OnM
         setStyle(DialogFragment.STYLE_NORMAL, R.style.editorTheme);
     }
 
-    @Nullable
-    @Override
+    @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_show_fragment, container, false);
+        View view = inflater.inflate(R.layout.reader_fragment, container, false);
 
-        MessageShowViewModel messageShowViewModel =
-                new ViewModelProvider(this).get(MessageShowViewModel.class);
-        View root = inflater.inflate(R.layout.message_show_fragment, container, false);
+        ReaderViewModel readerViewModel =
+                new ViewModelProvider(this).get(ReaderViewModel.class);
+        View root = inflater.inflate(R.layout.reader_fragment, container, false);
         final TextView textView = root.findViewById(R.id.show_To);
-        messageShowViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
+        readerViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
             @Override
             public void onChanged(@Nullable String s) {
                 textView.setText(s);
@@ -93,43 +88,21 @@ public class MessageShowFragment extends DialogFragment implements PopupMenu.OnM
 
 
         // TODO: add cc + bcc functionality
-        showBccButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                createNewPopup(true);
-            }
-        });
-
-        showCCButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                createNewPopup(false);
-            }
-        });
+        showBccButton.setOnClickListener(v -> createNewPopup(true));
 
-        closeButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                    dismiss();
-            }
+        showCCButton.setOnClickListener(v -> createNewPopup(false));
 
-        });
+        closeButton.setOnClickListener(v -> dismiss());
 
-        attachButton.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                // TODO: add file attachment functionality
-            }
+        attachButton.setOnClickListener(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(MessageShowFragment.this::onMenuItemClick);
-                popupMenu.inflate(R.menu.create_message_options_menu);
-                popupMenu.show();
-            }
+        dotButton.setOnClickListener(v -> {
+            PopupMenu popupMenu = new PopupMenu(getActivity(), v);
+            popupMenu.setOnMenuItemClickListener(ReaderFragment.this::onMenuItemClick);
+            popupMenu.inflate(R.menu.create_message_options_menu);
+            popupMenu.show();
         });
 
         return view;
@@ -160,7 +133,7 @@ public class MessageShowFragment extends DialogFragment implements PopupMenu.OnM
     public void createNewPopup(boolean bcc){
         AlertDialog.Builder alertDialog = new AlertDialog.Builder(getContext());
         AlertDialog dialog;
-        final View bccPopupView = getLayoutInflater().inflate(R.layout.cc_bcc_popup, null);
+        final View bccPopupView = getLayoutInflater().inflate(R.layout.reader_cc_bcc_popup, null);
         TextView mBcc = bccPopupView.findViewById(R.id.show_listBcc);
 
         alertDialog.setView(bccPopupView);
@@ -169,11 +142,8 @@ public class MessageShowFragment extends DialogFragment implements PopupMenu.OnM
 
         if (bcc){
             mBcc.setText(mCurrent.getBcc());
-        }else {
+        } else {
             mBcc.setText(mCurrent.getCc());
         }
-
-
-
     }
 }

+ 3 - 3
app/src/main/java/com/noahvogt/snailmail/ui/show/MessageShowViewModel.java → app/src/main/java/com/noahvogt/snailmail/ui/reader/ReaderViewModel.java

@@ -1,14 +1,14 @@
-package com.noahvogt.snailmail.ui.show;
+package com.noahvogt.snailmail.ui.reader;
 
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.MutableLiveData;
 import androidx.lifecycle.ViewModel;
 
-public class MessageShowViewModel extends ViewModel {
+public class ReaderViewModel extends ViewModel {
 
     private MutableLiveData<String> mText;
 
-    public MessageShowViewModel() {
+    public ReaderViewModel() {
         mText = new MutableLiveData<>();
         mText.setValue("This is from Simon");
     }

+ 4 - 5
app/src/main/java/com/noahvogt/snailmail/SettingsActivity.java → app/src/main/java/com/noahvogt/snailmail/ui/settings/SettingsActivity.java

@@ -1,12 +1,11 @@
-package com.noahvogt.snailmail;
+package com.noahvogt.snailmail.ui.settings;
 
 
 import android.os.Bundle;
 import androidx.appcompat.app.AppCompatActivity;
 
 import com.noahvogt.snailmail.R;
-import com.noahvogt.snailmail.SettingsFragment;
-import com.noahvogt.snailmail.ui.show.MessageShowFragment;
+import com.noahvogt.snailmail.ui.reader.ReaderFragment;
 
 import java.util.Objects;
 
@@ -15,7 +14,7 @@ public class SettingsActivity extends AppCompatActivity {
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_settings);
+        setContentView(R.layout.settings_activity);
 
 
         /* change the title of our action bar */
@@ -31,7 +30,7 @@ public class SettingsActivity extends AppCompatActivity {
         }
 
         if (findViewById(R.id.show_Layout) != null){
-            getSupportFragmentManager().beginTransaction().add(R.id.show_Layout, new MessageShowFragment()).commit();
+            getSupportFragmentManager().beginTransaction().add(R.id.show_Layout, new ReaderFragment()).commit();
         }
     }
 }

+ 3 - 1
app/src/main/java/com/noahvogt/snailmail/SettingsFragment.java → app/src/main/java/com/noahvogt/snailmail/ui/settings/SettingsFragment.java

@@ -1,9 +1,11 @@
-package com.noahvogt.snailmail;
+package com.noahvogt.snailmail.ui.settings;
 
 import android.os.Bundle;
 
 import androidx.preference.PreferenceFragmentCompat;
 
+import com.noahvogt.snailmail.R;
+
 public class SettingsFragment extends PreferenceFragmentCompat {
 
     public static SettingsFragment newInstance() {

+ 2 - 3
app/src/main/java/com/noahvogt/snailmail/workers/DownloadWorker.java

@@ -11,9 +11,8 @@ import androidx.work.WorkerParameters;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.gson.reflect.TypeToken;
-import com.noahvogt.snailmail.DataBase.Message;
-import com.noahvogt.snailmail.MailServerCredentials;
-import com.noahvogt.snailmail.MainActivity;
+import com.noahvogt.snailmail.database.Message;
+import com.noahvogt.snailmail.data.MailServerCredentials;
 import com.noahvogt.snailmail.data.BooleanTypeAdapter;
 import com.noahvogt.snailmail.data.MailFunctions;
 

+ 0 - 0
app/src/main/res/layout/popup.xml → app/src/main/res/layout/add_email_popup.xml


+ 0 - 0
app/src/main/res/layout/message_create_fragment.xml → app/src/main/res/layout/editor_fragment.xml


+ 1 - 1
app/src/main/res/layout/fragment_archive.xml → app/src/main/res/layout/mailbox_archive_fragment.xml

@@ -4,7 +4,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".ui.archive.ArchiveFragment">
+    tools:context=".ui.mailboxes.archiveFolder.ArchiveFragment">
 
     <TextView
         android:id="@+id/text_archive"

+ 1 - 1
app/src/main/res/layout/fragment_slideshow.xml → app/src/main/res/layout/mailbox_draft_fragment.xml

@@ -4,7 +4,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".ui.slideshow.DraftFragment">
+    tools:context=".ui.mailboxes.draftFolder.DraftFragment">
 
     <TextView
         android:id="@+id/text_slideshow"

+ 1 - 1
app/src/main/res/layout/fragment_home.xml → app/src/main/res/layout/mailbox_inbox_fragment.xml

@@ -7,7 +7,7 @@
     android:paddingTop="16dp"
     android:paddingRight="16dp"
     android:layout_gravity="top"
-    tools:context=".ui.home.HomeFragment">
+    tools:context=".ui.mailboxes.inboxFolder.InboxFragment">
 
     <TextView
         android:id="@+id/textView"

+ 1 - 1
app/src/main/res/layout/fragment_gallery.xml → app/src/main/res/layout/mailbox_sent_fragment.xml

@@ -4,7 +4,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".ui.gallery.GalleryFragment">
+    tools:context=".ui.mailboxes.sentFolder.SentFragment">
 
 
     <TextView

+ 1 - 1
app/src/main/res/layout/fragment_spam.xml → app/src/main/res/layout/mailbox_spam_fragment.xml

@@ -4,7 +4,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".ui.spam.SpamFragment">
+    tools:context=".ui.mailboxes.spamFolder.SpamFragment">
 
     <TextView
         android:id="@+id/text_spam"

+ 0 - 0
app/src/main/res/layout/activity_main.xml → app/src/main/res/layout/main_activity.xml


+ 0 - 0
app/src/main/res/layout/welcome.xml → app/src/main/res/layout/new_user_welcome_message.xml


+ 0 - 2
app/src/main/res/layout/cc_bcc_popup.xml → app/src/main/res/layout/reader_cc_bcc_popup.xml

@@ -11,6 +11,4 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"/>
 
-
-
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 1 - 1
app/src/main/res/layout/message_show_fragment.xml → app/src/main/res/layout/reader_fragment.xml

@@ -6,7 +6,7 @@
     android:layout_height="match_parent"
     android:id="@+id/messageFragment"
     android:orientation="vertical"
-    tools:context=".ui.show.MessageShowFragment">
+    tools:context=".ui.reader.ReaderFragment">
 
 
     <androidx.cardview.widget.CardView

+ 1 - 1
app/src/main/res/layout/activity_settings.xml → app/src/main/res/layout/settings_activity.xml

@@ -3,7 +3,7 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".SettingsActivity">
+    tools:context=".ui.settings.SettingsActivity">
 
     <FrameLayout
         android:id="@+id/idFrameLayout"

+ 11 - 11
app/src/main/res/navigation/mobile_navigation.xml

@@ -7,35 +7,35 @@
 
     <fragment
         android:id="@+id/nav_home"
-        android:name="com.noahvogt.snailmail.ui.home.HomeFragment"
+        android:name="com.noahvogt.snailmail.ui.mailboxes.inboxFolder.InboxFragment"
         android:label="@string/drawer_inbox"
-        tools:layout="@layout/fragment_home" />
+        tools:layout="@layout/mailbox_inbox_fragment" />
 
     <fragment
         android:id="@+id/nav_gallery"
-        android:name="com.noahvogt.snailmail.ui.gallery.GalleryFragment"
+        android:name="com.noahvogt.snailmail.ui.mailboxes.sentFolder.SentFragment"
         android:label="@string/drawer_sent"
-        tools:layout="@layout/fragment_gallery" />
+        tools:layout="@layout/mailbox_sent_fragment" />
 
     <fragment
         android:id="@+id/nav_slideshow"
-        android:name="com.noahvogt.snailmail.ui.slideshow.DraftFragment"
+        android:name="com.noahvogt.snailmail.ui.mailboxes.draftFolder.DraftFragment"
         android:label="@string/drawer_drafts"
-        tools:layout="@layout/fragment_slideshow" />
+        tools:layout="@layout/mailbox_draft_fragment" />
 
     <fragment
         android:id="@+id/nav_archive"
-        android:name="com.noahvogt.snailmail.ui.archive.ArchiveFragment"
+        android:name="com.noahvogt.snailmail.ui.mailboxes.archiveFolder.ArchiveFragment"
         android:label="@string/drawer_archive"
-        tools:layout="@layout/fragment_archive" />
+        tools:layout="@layout/mailbox_archive_fragment" />
 
     <fragment
         android:id="@+id/nav_spam"
-        android:name="com.noahvogt.snailmail.ui.spam.SpamFragment"
+        android:name="com.noahvogt.snailmail.ui.mailboxes.spamFolder.SpamFragment"
         android:label="@string/drawer_spam"
-        tools:layout="@layout/fragment_spam" />
+        tools:layout="@layout/mailbox_spam_fragment" />
 
     <fragment
         android:id="@+id/nav_show"
-        android:name="com.noahvogt.snailmail.ui.show.MessageShowFragment"/>
+        android:name="com.noahvogt.snailmail.ui.reader.ReaderFragment"/>
 </navigation>