Explorar o código

continue dehardcoding mailfunctions + fix MailServerCredentials Class calls + add finished account management in add email popup

Noah Vogt %!s(int64=3) %!d(string=hai) anos
pai
achega
773ef21626

+ 8 - 8
app/src/main/java/com/noahvogt/miniprojekt/MailServerCredentials.java

@@ -20,15 +20,15 @@ public class MailServerCredentials {
     public String getSignature () {return this.mSignature;}
 
     public MailServerCredentials(String name, String username, String password, String imapHost, String smtpHost, int imapPort, int smtpPort, String signature) {
-        mName = name;
-        mUsername = username;
-        mPassword = password;
+        this.mName = name;
+        this.mUsername = username;
+        this.mPassword = password;
 
-        mImapHost = imapHost;
-        mImapPort = imapPort;
-        mSmtpPort = smtpPort;
-        mSmtpHost = smtpHost;
+        this.mImapHost = imapHost;
+        this.mImapPort = imapPort;
+        this.mSmtpPort = smtpPort;
+        this.mSmtpHost = smtpHost;
 
-        mSignature = signature;
+        this.mSignature = signature;
     }
 }

+ 40 - 50
app/src/main/java/com/noahvogt/miniprojekt/MainActivity.java

@@ -314,22 +314,23 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
             Python.start(new AndroidPlatform(this));
         }
 
+
+
         /* store user input */
         newemail_save_button.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-
-                /* store user input (only needed for DEBUGGING) */
+                /* 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)) {
+                if (!MailFunctions.validateEmail(newemail_email) | !MailFunctions.validateName(newemail_name) |
+                        !MailFunctions.validatePassword(newemail_password)) {
                     return;
                 }
 
-
-                /* connect to mail server and print various debugging output */
+                /* connect to mail server */
                 showToast("Probe Connection ...");
                 if (MailFunctions.canConnect(MailFunctions.getImapHostFromEmail(email), email, password) == Boolean.TRUE) {
                     showToast("was able to connect");
@@ -340,59 +341,48 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
                     // startActivity(intent);
                     // startActivityForResult(intent, MainActivity.NEW_WORD_ACTIVITY_REQUEST_CODE);
 
-
-                    // List folders =  MailFunctions.listMailboxes(MailFunctions.getIMAPConnection(MailFunctions.getImapHostFromEmail(email), email, password));
-                    // for (int i = 0; i < folders.size(); i++) {
-                    //     showToast(folders.get(i).toString());
-                    //     // TODO: select right folder to store, Synchronization
-                    //     /*gives list of Message Objects/dictionaries
-                    // List p = MailFunctions.fetchMailsFromBox(
-                    //             MailFunctions.getIMAPConnection(
-                    //                     MailFunctions.getImapHostFromEmail(email), email, password),
-                    //             folders.get(i).toString(), "list");
-                    //     System.out.println(folders.get(i).toString());
-                    //     System.out.println(p);
-                    // }
-
-
-
                     /* TODO: replace legacy strings down below completely with serialized settings json string */
                     preferencesEditor.putString("name", name);
                     preferencesEditor.putString("email", email);
                     preferencesEditor.putString("password", password);
                     preferencesEditor.apply();
 
-                    /* init custom gson with hook to parse booleans correctly */
-                    GsonBuilder builder = new GsonBuilder();
-                    builder.registerTypeAdapter(Boolean.class, new BooleanTypeAdapter());
-                    Gson gson = builder.create();
-
-                    /* safe mail server login credentials */
-                    MailServerCredentials newMailServerCredentials = new MailServerCredentials(
-                            name, email, password, MailFunctions.getImapHostFromEmail(email), MailFunctions.getSmtpHostFromEmail(email), 993, 587, "");
-                    String newCredentialsJson = gson.toJson(newMailServerCredentials);
-                    System.out.println(newCredentialsJson);
-                    credentialsEditor.putString("data", newCredentialsJson);
-                    credentialsEditor.apply();
-
-                    /* download all messages from mail server */
+                    Gson gson = new Gson();
 
                     /* read login credentials from SharedPreferences */
-                    SharedPreferences credentialsReader = getSharedPreferences("UserPreferences", Context.MODE_PRIVATE);
-                    String readJsonData = credentialsReader.getString("data", "");
-                    MailServerCredentials readMailServerCredentials = gson.fromJson(readJsonData, MailServerCredentials.class);
-
-                    /* fetch and print draft messages */
-                    String fetchedMails = MailFunctions.fetchMailsFromBox(MailFunctions.getIMAPConnection(newMailServerCredentials.getImapHost(),
-                            newMailServerCredentials.getUsername(), newMailServerCredentials.getPassword(), newMailServerCredentials.getImapPort()), "Drafts");
-                    System.out.println(fetchedMails);
-
-                    /* parse messages in arraylist of Message class and loop through it */
-                    Type messageType = new TypeToken<ArrayList<Message>>(){}.getType();
-                    ArrayList<Message> messages = gson.fromJson(fetchedMails, messageType);
-                    for (int i = 0; i < messages.size(); i++) {
-                        System.out.println("Message #" + i);
-                        System.out.println(messages.get(i).toString());
+                    SharedPreferences initialCredentialsReader = getSharedPreferences(
+                            "Credentials", Context.MODE_PRIVATE);
+                    String initialReadJsonData = initialCredentialsReader.getString("data", "");
+                    Type credentialsType = new TypeToken<ArrayList<MailServerCredentials>>(){}.getType();
+                    ArrayList<MailServerCredentials> allUsersCredentials = gson.fromJson(initialReadJsonData, credentialsType);
+
+                    /* check for unique email */
+                    boolean newEmailIsUnique = true;
+                    try {
+                        for (int i = 0; i < allUsersCredentials.size(); i++) {
+                            System.out.println("User #" + i + 1);
+                            System.out.println(allUsersCredentials.get(i).getUsername());
+                            if (allUsersCredentials.get(i).getUsername().equals(email)) {
+                                newEmailIsUnique = false;
+                                break;
+                            }
+                        }
+                    } catch (NullPointerException e) {
+                        System.out.println("creating new arraylist for user credentials, as it seems to be empty");
+                        allUsersCredentials = new ArrayList<>();
+                    }
+
+                    /* add new email account if the email hasn't been entered before */
+                    if (newEmailIsUnique) {
+                        allUsersCredentials.add(new MailServerCredentials(name, email, password,
+                                MailFunctions.getImapHostFromEmail(email), MailFunctions.getSmtpHostFromEmail(email), 993,
+                                587, ""));
+                        credentialsEditor.putString("data", gson.toJson(allUsersCredentials, credentialsType));
+                        credentialsEditor.putString("currentUser", email);
+                        credentialsEditor.apply();
+                        showToast("Success: added new email account");
+                    } else {
+                        showToast("Error: cannot add the same email twice");
                     }
                 } else {
                     askForChangeMailServerSettingsDialog(name, email, password);

+ 2 - 1
app/src/main/java/com/noahvogt/miniprojekt/MessageCreateFragment.java

@@ -222,7 +222,8 @@ public class MessageCreateFragment extends DialogFragment implements PopupMenu.O
                 MailFunctions.validateEmail(receivingAddressObject) && MailFunctions.validateEmail(sendingAddressObject) &&
                 !MailFunctions.checkForSameEmail(sendingAddressObject, receivingAddressObject)) {
                     String password = preferences.getString("password","");
-                    MailFunctions.sendStarttlsMail("smtp.edubs.ch", sendingAddress, receivingAddress, password, messageBody, subject, ccStr, bccStr);
+                    MailFunctions.sendStarttlsMail("smtp.edubs.ch", sendingAddress, receivingAddress, password, messageBody,
+                            subject, ccStr, bccStr, 587);
                     Toast.makeText(getActivity(), "sending ... ", Toast.LENGTH_SHORT).show();
                     dismiss();
                 } else {

+ 4 - 2
app/src/main/java/com/noahvogt/miniprojekt/data/MailFunctions.java

@@ -16,10 +16,12 @@ public class MailFunctions {
         return pythonMailFunctions.callAttr("checkConnection", host, email, password, 993).toBoolean();
     }
 
-    public static void sendStarttlsMail(String host, String sendingMail, String receivingMail, String password, String message, String subject, String cc, String bcc) {
+    public static void sendStarttlsMail(String host, String sendingMail, String receivingMail, String password, String message,
+                                        String subject, String cc, String bcc, int port) {
         Python python = Python.getInstance();
         PyObject pythonMailFunctions = python.getModule("mailFunctions");
-        pythonMailFunctions.callAttr("sendStarttls", host, sendingMail, receivingMail, password, message, subject, 587, cc, bcc);
+        pythonMailFunctions.callAttr("sendStarttls", host, sendingMail, receivingMail, password,
+                message, subject, port, cc, bcc);
     }
 
     public static PyObject getIMAPConnection(String host, String email, String password, int port) {