Browse Source

merged branches

Simon Hammer 3 years ago
parent
commit
5e5edd9859
31 changed files with 576 additions and 286 deletions
  1. 88 0
      app/schemas/com.noahvogt.miniprojekt.DataBase.EmailRoomDatabase/1.json
  2. 1 1
      app/src/main/AndroidManifest.xml
  3. 3 13
      app/src/main/java/com/noahvogt/miniprojekt/DataBase/EmailRepository.java
  4. 23 14
      app/src/main/java/com/noahvogt/miniprojekt/DataBase/EmailRoomDatabase.java
  5. 1 1
      app/src/main/java/com/noahvogt/miniprojekt/DataBase/Message.java
  6. 9 23
      app/src/main/java/com/noahvogt/miniprojekt/DataBase/MessageDao.java
  7. 29 26
      app/src/main/java/com/noahvogt/miniprojekt/MainActivity.java
  8. 29 16
      app/src/main/java/com/noahvogt/miniprojekt/MessageCreateFragment.java
  9. 2 1
      app/src/main/java/com/noahvogt/miniprojekt/SettingsActivity.java
  10. 17 0
      app/src/main/java/com/noahvogt/miniprojekt/SettingsFragment.java
  11. 2 4
      app/src/main/java/com/noahvogt/miniprojekt/data/CustomAdapter.java
  12. 39 5
      app/src/main/java/com/noahvogt/miniprojekt/data/EmailViewHolder.java
  13. 4 4
      app/src/main/java/com/noahvogt/miniprojekt/data/EmailViewModel.java
  14. 39 1
      app/src/main/java/com/noahvogt/miniprojekt/data/MailFunctions.java
  15. 3 3
      app/src/main/java/com/noahvogt/miniprojekt/ui/archive/ArchiveFragment.java
  16. 4 28
      app/src/main/java/com/noahvogt/miniprojekt/ui/gallery/GalleryFragment.java
  17. 7 9
      app/src/main/java/com/noahvogt/miniprojekt/ui/home/HomeFragment.java
  18. 0 38
      app/src/main/java/com/noahvogt/miniprojekt/ui/home/SettingsFragment.java
  19. 57 14
      app/src/main/java/com/noahvogt/miniprojekt/ui/show/MessageShowFragment.java
  20. 7 4
      app/src/main/java/com/noahvogt/miniprojekt/ui/slideshow/DraftFragment.java
  21. 3 3
      app/src/main/java/com/noahvogt/miniprojekt/ui/spam/SpamFragment.java
  22. 58 9
      app/src/main/python/mailFunctions.py
  23. 8 0
      app/src/main/res/drawable/textview_border.xml
  24. 1 1
      app/src/main/res/layout/activity_settings.xml
  25. 16 0
      app/src/main/res/layout/cc_bcc_popup.xml
  26. 7 7
      app/src/main/res/layout/fragment_home.xml
  27. 1 1
      app/src/main/res/layout/message_create_fragment.xml
  28. 110 56
      app/src/main/res/layout/message_show_fragment.xml
  29. 4 4
      app/src/main/res/menu/create_message_options_menu.xml
  30. 3 0
      app/src/main/res/values/strings.xml
  31. 1 0
      app/src/main/res/values/style.xml

+ 88 - 0
app/schemas/com.noahvogt.miniprojekt.DataBase.EmailRoomDatabase/1.json

@@ -0,0 +1,88 @@
+{
+  "formatVersion": 1,
+  "database": {
+    "version": 1,
+    "identityHash": "217605d4a5ec0067e9003ad5b099a303",
+    "entities": [
+      {
+        "tableName": "message_table",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `to` TEXT NOT NULL, `cc` TEXT, `bcc` TEXT, `fromEmail` TEXT NOT NULL, `date` TEXT NOT NULL, `subject` TEXT, `textContent` TEXT, `folder` TEXT NOT NULL, `seen` INTEGER NOT NULL)",
+        "fields": [
+          {
+            "fieldPath": "id",
+            "columnName": "id",
+            "affinity": "INTEGER",
+            "notNull": true
+          },
+          {
+            "fieldPath": "mTo",
+            "columnName": "to",
+            "affinity": "TEXT",
+            "notNull": true
+          },
+          {
+            "fieldPath": "mCc",
+            "columnName": "cc",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "mBcc",
+            "columnName": "bcc",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "mFrom",
+            "columnName": "fromEmail",
+            "affinity": "TEXT",
+            "notNull": true
+          },
+          {
+            "fieldPath": "mDate",
+            "columnName": "date",
+            "affinity": "TEXT",
+            "notNull": true
+          },
+          {
+            "fieldPath": "mSubject",
+            "columnName": "subject",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "mTextContent",
+            "columnName": "textContent",
+            "affinity": "TEXT",
+            "notNull": false
+          },
+          {
+            "fieldPath": "mFolder",
+            "columnName": "folder",
+            "affinity": "TEXT",
+            "notNull": true
+          },
+          {
+            "fieldPath": "mSeen",
+            "columnName": "seen",
+            "affinity": "INTEGER",
+            "notNull": true
+          }
+        ],
+        "primaryKey": {
+          "columnNames": [
+            "id"
+          ],
+          "autoGenerate": true
+        },
+        "indices": [],
+        "foreignKeys": []
+      }
+    ],
+    "views": [],
+    "setupQueries": [
+      "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+      "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '217605d4a5ec0067e9003ad5b099a303')"
+    ]
+  }
+}

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

@@ -21,7 +21,7 @@
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
-        <activity android:name=".ui.home.SettingsActivity"/>
+        <activity android:name=".SettingsActivity"/>
     </application>
 
 </manifest>

+ 3 - 13
app/src/main/java/com/noahvogt/miniprojekt/ui/DataBase/EmailRepository.java → app/src/main/java/com/noahvogt/miniprojekt/DataBase/EmailRepository.java

@@ -1,7 +1,6 @@
-package com.noahvogt.miniprojekt.ui.DataBase;
+package com.noahvogt.miniprojekt.DataBase;
 
 import android.app.Application;
-import android.os.AsyncTask;
 
 import androidx.lifecycle.LiveData;
 
@@ -62,23 +61,14 @@ public class EmailRepository {
     }
 
     public void deleteMessage(final Message message){
-       /* new AsyncTask<Void, Void, Void>() {
-            @Override
-            protected Void doInBackground(Void... voids) {
-                db.MessageDao().deleteMessage(message);
-                return null;
-            }
-        }.execute();
-
-        */
         EmailRoomDatabase.databaseWriteExecutor.execute(() -> {
             messageDao.delete(message);
         });
     }
 
-    public void updateMessage(final Message message){
+    public void updateMessage(final int id, String folder){
         EmailRoomDatabase.databaseWriteExecutor.execute(() -> {
-            messageDao.updateMessage(message);
+            messageDao.updateMessage(id ,folder);
         });
     }
 }

+ 23 - 14
app/src/main/java/com/noahvogt/miniprojekt/ui/DataBase/EmailRoomDatabase.java → app/src/main/java/com/noahvogt/miniprojekt/DataBase/EmailRoomDatabase.java

@@ -1,8 +1,7 @@
-package com.noahvogt.miniprojekt.ui.DataBase;
+package com.noahvogt.miniprojekt.DataBase;
 
 import android.content.Context;
-import android.content.Intent;
-import android.icu.util.Measure;
+import android.widget.Toast;
 
 import androidx.annotation.NonNull;
 import androidx.room.Database;
@@ -11,6 +10,7 @@ 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;
 
@@ -69,22 +69,31 @@ public abstract class EmailRoomDatabase extends RoomDatabase{
 
 
                 Message word = new Message("Noah", null , null,
-                        "Samuel", "31.9.21", "inboxTest", "I Try my best", "Inbox",
+                        "Samuel", "31.09.21", "inboxTest", "I Try my best", "Inbox",
                         true);
-               dao.insert(word);
+                dao.insert(word);
+
+                word = new Message("Pueblo", "my Man, your Girl", null,
+                        "Escobar", "31.02.21", "DateSortTest", "I hope the Sorting works", "Inbox",
+                        true);
+                dao.insert(word);
+
+                word = new Message("Pueblo", "my Man, your Girl", null,
+                        "Escobar", "31.02.21", "VariableTest", "I hope the Sorting works", "Inbox",
+                        true);
+                dao.insert(word);
+
+                word = new Message("Again", null, null, "Again", "31.09.21", "DateTest",
+                        "Does this Date work know?", "Inbox", true);
+                dao.insert(word);
+
 
-               word = new Message("Noah", null, null,
+                word = new Message("Noah", null, null,
                        "arldemeier", "bobo", "sentTest", "i could cry", "Sent",
                        true);
-               dao.insert(word);
+                dao.insert(word);
+
 
-               
-               for (Integer n = 1; n < 20; n++) {
-                   word = new Message("Simon", null, null,
-                           "stefan", "tomorrow", n.toString(), "lets goo", "Sent",
-                           true);
-                   dao.insert(word);
-               }
 
                /*
                for (int i = 1; i < 20; i++){

+ 1 - 1
app/src/main/java/com/noahvogt/miniprojekt/ui/DataBase/Message.java → app/src/main/java/com/noahvogt/miniprojekt/DataBase/Message.java

@@ -1,4 +1,4 @@
-package com.noahvogt.miniprojekt.ui.DataBase;
+package com.noahvogt.miniprojekt.DataBase;
 
 import androidx.annotation.NonNull;
 import androidx.room.ColumnInfo;

+ 9 - 23
app/src/main/java/com/noahvogt/miniprojekt/ui/DataBase/MessageDao.java → app/src/main/java/com/noahvogt/miniprojekt/DataBase/MessageDao.java

@@ -1,4 +1,4 @@
-package com.noahvogt.miniprojekt.ui.DataBase;
+package com.noahvogt.miniprojekt.DataBase;
 
 import androidx.lifecycle.LiveData;
 import androidx.room.Dao;
@@ -13,21 +13,7 @@ import java.util.List;
 @Dao
 public interface MessageDao {
 
-    /*
-
-    WordDao is an interface; DAOs must either be interfaces or abstract classes.
-    The @Dao annotation identifies it as a DAO class for Room.
-    void insert(Word word); Declares a method to insert one word:
-    The @Insert annotation is a special DAO method annotation where you don't have to provide any SQL! (There are also @Delete and @Update annotations for deleting and updating rows, but you are not using them in this app.)
-    onConflict = OnConflictStrategy.IGNORE: The selected on conflict strategy ignores a new word if it's exactly the same as one already in the list. To know more about the available conflict strategies, check out the documentation.
-    deleteAll(): declares a method to delete all the words.
-    There is no convenience annotation for deleting multiple entities, so it's annotated with the generic @Query.
-    @Query("DELETE FROM word_table"): @Query requires that you provide a SQL query as a string parameter to the annotation.
-    List<Word> getAlphabetizedWords(): A method to get all the words and have it return a List of Words.
-    @Query("SELECT * FROM word_table ORDER BY word ASC"): Returns a list of words sorted in ascending order.
-
-     */
-
+    // TODO: updating messages, search funktion, read in cc and bcc as list
     // allowing the insert of the same word multiple times by passing a
     // conflict resolution strategy
     @Insert(onConflict = OnConflictStrategy.IGNORE)
@@ -39,8 +25,8 @@ public interface MessageDao {
     @Delete(entity = Message.class)
     void delete(Message message);
 
-    @Update(entity = Message.class)
-    void updateMessage(Message message);
+    @Query("UPDATE message_table SET folder = :folder WHERE id = :id")
+    void updateMessage(int id, String folder);
 
     @Query("DELETE FROM message_table WHERE subject='DELETE'")
     void deleteNewMessage();
@@ -55,23 +41,23 @@ public interface MessageDao {
     LiveData<List<Message>> getDateMessages();
 
     /* get Draft messages*/
-    @Query("SELECT * FROM message_table WHERE folder LIKE 'Draft' ORDER BY date ASC")
+    @Query("SELECT * FROM message_table WHERE folder LIKE 'Draft' ORDER BY date DESC")
     LiveData<List<Message>> getDraftMessages();
 
     /* get Inbox messages*/
-    @Query("SELECT * FROM message_table WHERE folder LIKE 'Inbox' ORDER BY date ASC")
+    @Query("SELECT * FROM message_table WHERE folder LIKE 'Inbox' ORDER BY date DESC")
     LiveData<List<Message>> getInboxMessages();
 
     /* get Sent messages*/
-    @Query("SELECT * FROM message_table WHERE folder LIKE 'Sent' ORDER BY date ASC")
+    @Query("SELECT * FROM message_table WHERE folder LIKE 'Sent' ORDER BY date DESC")
     LiveData<List<Message>> getSentMessages();
 
     /* get Archive messages*/
-    @Query("SELECT * FROM message_table WHERE folder LIKE 'Archive' ORDER BY date ASC")
+    @Query("SELECT * FROM message_table WHERE folder LIKE 'Archive' ORDER BY date DESC")
     LiveData<List<Message>> getArchiveMessages();
 
     /* get Spam messages*/
-    @Query("SELECT * FROM message_table WHERE folder LIKE 'Spam' ORDER BY date ASC")
+    @Query("SELECT * FROM message_table WHERE folder LIKE 'Spam' ORDER BY date DESC")
     LiveData<List<Message>> getSpamMessages();
 
 

+ 29 - 26
app/src/main/java/com/noahvogt/miniprojekt/MainActivity.java

@@ -18,8 +18,7 @@ import androidx.fragment.app.DialogFragment;
 
 
 import com.google.android.material.floatingactionbutton.FloatingActionButton;
-import com.noahvogt.miniprojekt.ui.DataBase.Message;
-import com.noahvogt.miniprojekt.ui.home.CustomAdapter;
+import com.noahvogt.miniprojekt.DataBase.Message;
 
 import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentManager;
@@ -38,9 +37,10 @@ import androidx.navigation.ui.NavigationUI;
 import com.chaquo.python.Python;
 import com.chaquo.python.android.AndroidPlatform;
 import com.google.android.material.snackbar.Snackbar;
-import com.noahvogt.miniprojekt.ui.home.SettingsActivity;
+import com.noahvogt.miniprojekt.data.CustomAdapter;
+import com.noahvogt.miniprojekt.data.EmailViewModel;
+import com.noahvogt.miniprojekt.data.MailFunctions;
 import com.noahvogt.miniprojekt.ui.show.MessageShowFragment;
-import com.noahvogt.miniprojekt.ui.slideshow.EmailViewModel;
 
 import java.text.SimpleDateFormat;
 import java.util.Date;
@@ -164,7 +164,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
             @Override
             public void onClick(View v) {
 
-                DialogFragment dialog = messageCreateFragment.newInstance();
+                DialogFragment dialog = MessageCreateFragment.newInstance();
                 dialog.show(getSupportFragmentManager(), "tag");
 
             }
@@ -174,35 +174,26 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
 
         /* gets the data from the Email writer and adds it to the Database */
         public void onActivityResult(int requestCode, int resultCode, Intent data) {
-            super.onActivityResult(requestCode, resultCode, messageCreateFragment.replyIntent);
+            super.onActivityResult(requestCode, resultCode, MessageCreateFragment.replyIntent);
 
             /* Creates class for the Date when Email is written */
             Date dNow = new Date();
             SimpleDateFormat ft =
                     new SimpleDateFormat("dd.MM.yy");
+            System.out.println(dNow);
 
          //   if (requestCode == NEW_WORD_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) {
                 Message word = new Message(
-                        messageCreateFragment.replyIntent.getStringExtra(messageCreateFragment.EXTRA_TO),
+                        MessageCreateFragment.replyIntent.getStringExtra(MessageCreateFragment.EXTRA_TO),
                         null,
                         null,
-                        messageCreateFragment.replyIntent.getStringExtra(messageCreateFragment.EXTRA_FROM),
+                        MessageCreateFragment.replyIntent.getStringExtra(MessageCreateFragment.EXTRA_FROM),
                         ft.format(dNow),
-                        messageCreateFragment.replyIntent.getStringExtra(messageCreateFragment.EXTRA_SUBJECT),
-                        messageCreateFragment.replyIntent.getStringExtra(messageCreateFragment.EXTRA_MESSAGE),
+                        MessageCreateFragment.replyIntent.getStringExtra(MessageCreateFragment.EXTRA_SUBJECT),
+                        MessageCreateFragment.replyIntent.getStringExtra(MessageCreateFragment.EXTRA_MESSAGE),
                         "Draft",false);
                 mEmailViewModel.insert(word);
-          //  } else {
-                Toast.makeText(
-                        getApplicationContext(),
-                        R.string.empty_not_saved,
-                        Toast.LENGTH_LONG).show();
 
-            Toast.makeText(
-                    getApplicationContext(),
-                    messageCreateFragment.replyIntent.getStringExtra(messageCreateFragment.EXTRA_FROM),
-                    Toast.LENGTH_LONG).show();
-          //  }
 
 
         }
@@ -274,14 +265,25 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
                 showToast("Probe Connection ...");
                 if (MailFunctions.canConnect(name, email, password) == Boolean.TRUE) {
                     showToast("was able to connect");
-                    List l =  MailFunctions.listMailboxes(MailFunctions.getIMAPConnection(name, email, password));
-                    for (int i = 0; i < l.size(); i++) {
-                        showToast(l.get(i).toString());
+                    List folders =  MailFunctions.listMailboxes(MailFunctions.getIMAPConnection(name, 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(name, email, password), l.get(i).toString(), "list");
-                        System.out.println(l.get(i).toString());
-                        System.out.println(p);
+                        List messages = MailFunctions.fetchMailsFromBox(MailFunctions.getIMAPConnection(name, email, password), folders.get(i).toString(), "list");
+                        System.out.println(folders.get(i).toString());
+                        System.out.println(messages.toString());
+
+
+                        for (int k = 0; k < messages.size(); k++) {
+                            System.out.println(messages.get(k));
+                                /*work now, but list of Messages not */
+
+
+
+
+                        }
+
                     }
 
                     /*Message word = new Message(
@@ -322,6 +324,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
 
     }
 
+
     /* show debug output in  specific view */
     private void showSnackbar(View View, String text) {
         Snackbar.make(View, text, Snackbar.LENGTH_LONG)

+ 29 - 16
app/src/main/java/com/noahvogt/miniprojekt/messageCreateFragment.java → app/src/main/java/com/noahvogt/miniprojekt/MessageCreateFragment.java

@@ -21,15 +21,21 @@ import androidx.annotation.Nullable;
 import androidx.appcompat.app.AlertDialog;
 import androidx.fragment.app.DialogFragment;
 
+import com.noahvogt.miniprojekt.DataBase.Message;
+import com.noahvogt.miniprojekt.data.EmailViewModel;
+import com.noahvogt.miniprojekt.data.MailFunctions;
+
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
-public class messageCreateFragment extends DialogFragment implements PopupMenu.OnMenuItemClickListener {
+public class MessageCreateFragment extends DialogFragment implements PopupMenu.OnMenuItemClickListener {
 
     public static final String EXTRA_TO = "com.example.android.namelistsql.NAME";
     public static final String EXTRA_FROM = "com.example.android.namelistsql.FROM";
     public static final String EXTRA_SUBJECT = "com.example.android.namelistsql.SUBJECT";
     public static final String EXTRA_MESSAGE = "com.example.android.namelistsql.MESSAGE";
+    public static final String EXTRA_CC = "com.example.android.namelistsql.CC";
+    public static final String EXTRA_BCC = "com.example.android.namelistsql.BCC";
     public static final String EXTRA_DATE = "com.example.android.namelistsql.DATE";
 
     public EditText sendingAddressObject;
@@ -39,14 +45,23 @@ public class messageCreateFragment extends DialogFragment implements PopupMenu.O
     public EditText ccObject;
     public EditText bccObject;
 
+    Message mMessage = null;
+    public EmailViewModel mEmailViewModel = null;
+
     public static final int RESULT_CANCELED = 0;
     public static final int RESULT_OK = -1;
 
     public Activity activity = new Activity();
     public static Intent replyIntent = new Intent();
 
-    public static messageCreateFragment newInstance() {
-        return new messageCreateFragment();
+    public static MessageCreateFragment newInstance() {
+        return new MessageCreateFragment();
+    }
+
+    public MessageCreateFragment getMessage(Message message, EmailViewModel emailViewModel, MessageCreateFragment messageCreateFragment){
+        this.mEmailViewModel = emailViewModel;
+        this.mMessage = message;
+        return messageCreateFragment;
     }
 
     private AlertDialog dialog;
@@ -91,10 +106,14 @@ public class messageCreateFragment extends DialogFragment implements PopupMenu.O
         sendingAddressObject.setText(loginEmail);
 
         /* get string vars, MAYBE NOT HERE */
-        String sendingAddress = sendingAddressObject.getText().toString();
-        String receivingAddress = receivingAddressObject.getText().toString();
-        //String subject = subjectObject.getText().toString();
-        String messageBody = messageBodyObject.getText().toString();
+        if (mMessage != null) {
+            sendingAddressObject.setText(mMessage.getFrom());
+            receivingAddressObject.setText(mMessage.getTo());
+            subjectObject.setText(mMessage.getSubject());
+            messageBodyObject.setText(mMessage.getTextContent());
+            bccObject.setText(mMessage.getBcc());
+            ccObject.setText(mMessage.getCc());
+        }
 
         /* TODO: add cc + bcc functionality */
 
@@ -140,14 +159,14 @@ public class messageCreateFragment extends DialogFragment implements PopupMenu.O
 
                                     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();
 
-                                    Toast.makeText(getContext(), "messageCreateFragmentReadIn", Toast.LENGTH_SHORT).show();
-                                    Toast.makeText(getContext(), replyIntent.getStringExtra(EXTRA_FROM), Toast.LENGTH_SHORT).show();
 
                                     Intent intent = new Intent(getContext(), NewDraftMessageActivity.class);
                                     startActivityForResult(intent, MainActivity.NEW_WORD_ACTIVITY_REQUEST_CODE);
@@ -181,7 +200,7 @@ public class messageCreateFragment extends DialogFragment implements PopupMenu.O
             @Override
             public void onClick(View v) {
                 PopupMenu popupMenu = new PopupMenu(getActivity(), v);
-                popupMenu.setOnMenuItemClickListener(messageCreateFragment.this::onMenuItemClick);
+                popupMenu.setOnMenuItemClickListener(MessageCreateFragment.this::onMenuItemClick);
                 popupMenu.inflate(R.menu.create_message_options_menu);
                 popupMenu.show();
             }
@@ -237,12 +256,6 @@ public class messageCreateFragment extends DialogFragment implements PopupMenu.O
             case R.id.create_message_spam:
                 Toast.makeText(getActivity(), "item 2 clicked", Toast.LENGTH_LONG).show();
                 return true;
-            case R.id.create_message_move_to:
-                Toast.makeText(getActivity(), "item 3 clicked", Toast.LENGTH_LONG).show();
-                return true;
-            case R.id.create_message_sent_to:
-                Toast.makeText(getActivity(), "item 4 clicked", Toast.LENGTH_LONG).show();
-                return true;
             default: /* this case should never occur */
                 return false;
         }

+ 2 - 1
app/src/main/java/com/noahvogt/miniprojekt/ui/home/SettingsActivity.java → app/src/main/java/com/noahvogt/miniprojekt/SettingsActivity.java

@@ -1,10 +1,11 @@
-package com.noahvogt.miniprojekt.ui.home;
+package com.noahvogt.miniprojekt;
 
 
 import android.os.Bundle;
 import androidx.appcompat.app.AppCompatActivity;
 
 import com.noahvogt.miniprojekt.R;
+import com.noahvogt.miniprojekt.SettingsFragment;
 import com.noahvogt.miniprojekt.ui.show.MessageShowFragment;
 
 import java.util.Objects;

+ 17 - 0
app/src/main/java/com/noahvogt/miniprojekt/SettingsFragment.java

@@ -0,0 +1,17 @@
+package com.noahvogt.miniprojekt;
+
+import android.os.Bundle;
+
+import androidx.preference.PreferenceFragmentCompat;
+
+public class SettingsFragment extends PreferenceFragmentCompat {
+
+    public static SettingsFragment newInstance() {
+        return new SettingsFragment();
+    }
+
+    @Override
+    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
+        addPreferencesFromResource(R.xml.settings);
+    }
+}

+ 2 - 4
app/src/main/java/com/noahvogt/miniprojekt/ui/home/CustomAdapter.java → app/src/main/java/com/noahvogt/miniprojekt/data/CustomAdapter.java

@@ -1,4 +1,4 @@
- package com.noahvogt.miniprojekt.ui.home;
+ package com.noahvogt.miniprojekt.data;
 
 
 import android.os.Build;
@@ -10,9 +10,7 @@ import androidx.annotation.RequiresApi;
 import androidx.recyclerview.widget.DiffUtil;
 import androidx.recyclerview.widget.ListAdapter;
 
-import com.noahvogt.miniprojekt.ui.DataBase.Message;
-import com.noahvogt.miniprojekt.ui.slideshow.EmailViewHolder;
-import com.noahvogt.miniprojekt.ui.slideshow.EmailViewModel;
+import com.noahvogt.miniprojekt.DataBase.Message;
 
 
 import java.util.List;

+ 39 - 5
app/src/main/java/com/noahvogt/miniprojekt/ui/slideshow/EmailViewHolder.java → app/src/main/java/com/noahvogt/miniprojekt/data/EmailViewHolder.java

@@ -1,17 +1,21 @@
-package com.noahvogt.miniprojekt.ui.slideshow;
+package com.noahvogt.miniprojekt.data;
 
+import android.annotation.SuppressLint;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.TextView;
+import android.widget.Toast;
 
-import com.noahvogt.miniprojekt.ui.DataBase.Message;
-import com.noahvogt.miniprojekt.ui.home.CustomAdapter;
+import com.noahvogt.miniprojekt.DataBase.Message;
 import com.noahvogt.miniprojekt.R;
 
 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 {
@@ -33,13 +37,31 @@ public class EmailViewHolder extends RecyclerView.ViewHolder {
             @Override
             public void onClick(View v) {
                 selectedMessage.selectedMessage(messageList.get(getBindingAdapterPosition()), null );
-
-
             }
         });
     }
 
     public void bind(String from, String subject, String date, String message) {
+        System.out.println("length of from " + from.length());
+        System.out.println("length of message " + message.length());
+
+
+        if (subject.length() > 30){
+            subject = subject.substring(0,26) + "...";
+        }
+        if (from.length() > 12) {
+            from = from.substring(0,12) + "...";
+        }
+        if (message.length() > 30){
+            message = message.substring(0,30) + "...";
+        }
+        if (date.length() > 9){
+            date = "INVALID";
+        }
+        if (!isDate(date)){
+            date = "INVALID";
+        }
+
         fromItemView.setText(from);
         subjectItemView.setText(subject);
         dateItemView.setText(date);
@@ -54,6 +76,18 @@ public class EmailViewHolder extends RecyclerView.ViewHolder {
         return new EmailViewHolder(view, selectedMessage, messageList);
     }
 
+    public static boolean isDate(String date){
+        SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yy", Locale.getDefault());
+        //dateFormat.setLenient(false);
+        try {
+            dateFormat.parse(date);
+        } catch (ParseException e){
+            return false;
+        }
+
+        return true;
+    }
+
 
 
     }

+ 4 - 4
app/src/main/java/com/noahvogt/miniprojekt/ui/slideshow/EmailViewModel.java → app/src/main/java/com/noahvogt/miniprojekt/data/EmailViewModel.java

@@ -1,12 +1,12 @@
-package com.noahvogt.miniprojekt.ui.slideshow;
+package com.noahvogt.miniprojekt.data;
 
 import android.app.Application;
 
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.AndroidViewModel;
 
-import com.noahvogt.miniprojekt.ui.DataBase.EmailRepository;
-import com.noahvogt.miniprojekt.ui.DataBase.Message;
+import com.noahvogt.miniprojekt.DataBase.EmailRepository;
+import com.noahvogt.miniprojekt.DataBase.Message;
 
 import java.util.List;
 
@@ -46,5 +46,5 @@ public class EmailViewModel extends AndroidViewModel {
 
     public void deleteMessage(Message message){mEmailRepository.deleteMessage(message);}
 
-    public void updateMessage(Message message){mEmailRepository.updateMessage(message);}
+    public void updateMessage(int id, String folder){mEmailRepository.updateMessage(id, folder);}
 }

+ 39 - 1
app/src/main/java/com/noahvogt/miniprojekt/MailFunctions.java → app/src/main/java/com/noahvogt/miniprojekt/data/MailFunctions.java

@@ -1,4 +1,4 @@
-package com.noahvogt.miniprojekt;
+package com.noahvogt.miniprojekt.data;
 
 import android.util.Patterns;
 import android.widget.EditText;
@@ -39,6 +39,44 @@ public class MailFunctions {
         PyObject pythonMailFunctions = python.getModule("mailFunctions");
         return pythonMailFunctions.callAttr("fetchMails", IMAPConnection, Folder, InputType).asList();
     }
+/*
+    public static String fetchSubject(int messageIndex){
+        Python python = Python.getInstance();
+        PyObject pythonMailFunction = python.getModule("mailFunctions");
+        return pythonMailFunction.callAttr("printSubject", messageIndex).toString();
+    }
+
+    public static String fetchFrom(int messageIndex){
+        Python python = Python.getInstance();
+        PyObject pythonMailFunction = python.getModule("mailFunctions");
+        return pythonMailFunction.callAttr("printFrom", messageIndex).toString();
+    }
+    public static String fetchTo(int messageIndex){
+        Python python = Python.getInstance();
+        PyObject pythonMailFunction = python.getModule("mailFunctions");
+        return pythonMailFunction.callAttr("printTo", messageIndex).toString();
+    }
+    public static String fetchBcc(int messageIndex){
+        Python python = Python.getInstance();
+        PyObject pythonMailFunction = python.getModule("mailFunctions");
+        return pythonMailFunction.callAttr("printBcc", messageIndex).toString();
+    }
+    public static String fetchCC(int messageIndex){
+        Python python = Python.getInstance();
+        PyObject pythonMailFunction = python.getModule("mailFunctions");
+        return pythonMailFunction.callAttr("printCc", messageIndex).toString();
+    }
+    public static String fetchDate(int meassageIndex){
+        Python python = Python.getInstance();
+        PyObject pythonMailFunction = python.getModule("mailFunctions");
+        return pythonMailFunction.callAttr("printDate", meassageIndex).toString();
+    }
+    public static String fetchContent(int messageIndex){
+        Python python = Python.getInstance();
+        PyObject pythonMailFunction = python.getModule("mailFunctions");
+        return pythonMailFunction.callAttr("printContent", messageIndex).toString();
+
+ */
 
     public static boolean validateName(EditText emailName) {
         String name = emailName.getText().toString().trim();

+ 3 - 3
app/src/main/java/com/noahvogt/miniprojekt/ui/archive/ArchiveFragment.java

@@ -18,10 +18,10 @@ import androidx.recyclerview.widget.RecyclerView;
 
 import com.noahvogt.miniprojekt.MainActivity;
 import com.noahvogt.miniprojekt.R;
-import com.noahvogt.miniprojekt.ui.DataBase.Message;
-import com.noahvogt.miniprojekt.ui.home.CustomAdapter;
+import com.noahvogt.miniprojekt.DataBase.Message;
+import com.noahvogt.miniprojekt.data.CustomAdapter;
 import com.noahvogt.miniprojekt.ui.show.MessageShowFragment;
-import com.noahvogt.miniprojekt.ui.slideshow.EmailViewModel;
+import com.noahvogt.miniprojekt.data.EmailViewModel;
 
 public class ArchiveFragment extends Fragment implements CustomAdapter.SelectedMessage{
 

+ 4 - 28
app/src/main/java/com/noahvogt/miniprojekt/ui/gallery/GalleryFragment.java

@@ -18,13 +18,12 @@ import androidx.lifecycle.ViewModelProvider;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
-import com.noahvogt.miniprojekt.MailFunctions;
 import com.noahvogt.miniprojekt.MainActivity;
 import com.noahvogt.miniprojekt.R;
-import com.noahvogt.miniprojekt.ui.DataBase.Message;
-import com.noahvogt.miniprojekt.ui.home.CustomAdapter;
+import com.noahvogt.miniprojekt.DataBase.Message;
+import com.noahvogt.miniprojekt.data.CustomAdapter;
 import com.noahvogt.miniprojekt.ui.show.MessageShowFragment;
-import com.noahvogt.miniprojekt.ui.slideshow.EmailViewModel;
+import com.noahvogt.miniprojekt.data.EmailViewModel;
 
 import org.jetbrains.annotations.NotNull;
 
@@ -52,29 +51,6 @@ public class GalleryFragment extends Fragment implements CustomAdapter.SelectedM
 
         recyclerView = MainActivity.recyclerView.findViewById(R.id.recyclerView);
 
-
-        recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
-            @Override
-            public boolean onInterceptTouchEvent(@NonNull @NotNull RecyclerView rv, @NonNull @NotNull MotionEvent e) {
-              //  Toast.makeText(getContext(), "Single Interception Click on position :"+rv,
-             //           Toast.LENGTH_SHORT).show();
-                return false;
-            }
-
-            @Override
-            public void onTouchEvent(@NonNull @NotNull RecyclerView rv, @NonNull @NotNull MotionEvent e) {
-                Toast.makeText(getContext(), "Single Click on position :"+rv,
-                        Toast.LENGTH_SHORT).show();
-
-            }
-
-            @Override
-            public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
-
-            }
-        });
-
-
         final CustomAdapter adapter = new CustomAdapter(new CustomAdapter.EmailDiff(), this);
 
 
@@ -95,9 +71,9 @@ public class GalleryFragment extends Fragment implements CustomAdapter.SelectedM
     }
 
 
+    /*starts Dialog of clicked message*/
     @Override
     public void selectedMessage(Message messages, EmailViewModel emailViewModel) {
-
         AppCompatActivity activity = (AppCompatActivity) getContext();
         DialogFragment dialog = MessageShowFragment.newInstance(messages, mEmailViewModel);
         dialog.show(activity.getSupportFragmentManager(), "tag");

+ 7 - 9
app/src/main/java/com/noahvogt/miniprojekt/ui/home/HomeFragment.java

@@ -5,6 +5,7 @@ import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.TextView;
+import android.widget.Toast;
 
 
 import androidx.annotation.NonNull;
@@ -17,11 +18,15 @@ import androidx.lifecycle.ViewModelProvider;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
+import com.noahvogt.miniprojekt.data.CustomAdapter;
 import com.noahvogt.miniprojekt.MainActivity;
 import com.noahvogt.miniprojekt.R;
-import com.noahvogt.miniprojekt.ui.DataBase.Message;
+import com.noahvogt.miniprojekt.DataBase.Message;
 import com.noahvogt.miniprojekt.ui.show.MessageShowFragment;
-import com.noahvogt.miniprojekt.ui.slideshow.EmailViewModel;
+import com.noahvogt.miniprojekt.data.EmailViewModel;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 
 public class HomeFragment extends Fragment implements CustomAdapter.SelectedMessage{
 
@@ -41,7 +46,6 @@ public class HomeFragment extends Fragment implements CustomAdapter.SelectedMess
         /* Attach the adapter to the recyclerview to populate items */
         recyclerView.setAdapter(adapter);
         recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
-        //mEmailViewModel = new ViewModelProvider(this).get(EmailViewModel.class);
 
         mEmailViewModel = new ViewModelProvider(this).get(EmailViewModel.class);
         mEmailViewModel.getInboxMessage().observe(getViewLifecycleOwner(), messages -> {
@@ -58,12 +62,6 @@ public class HomeFragment extends Fragment implements CustomAdapter.SelectedMess
                 new ViewModelProvider(this).get(HomeViewModel.class);
         View root = inflater.inflate(R.layout.fragment_home, container, false);
         final TextView textView = root.findViewById(R.id.textView);
-        homeViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
-            @Override
-            public void onChanged(@Nullable String s) {
-                textView.setText(s);
-            }
-        });
         return root;
     }
 

+ 0 - 38
app/src/main/java/com/noahvogt/miniprojekt/ui/home/SettingsFragment.java

@@ -1,38 +0,0 @@
-package com.noahvogt.miniprojekt.ui.home;
-
-import android.os.Bundle;
-
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.EditText;
-import android.widget.ImageButton;
-import android.widget.PopupMenu;
-import android.widget.Toast;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.appcompat.app.AlertDialog;
-import androidx.fragment.app.DialogFragment;
-
-import androidx.fragment.app.Fragment;
-import androidx.appcompat.app.AlertDialog;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceFragmentCompat;
-
-import com.noahvogt.miniprojekt.R;
-
-public class SettingsFragment extends PreferenceFragmentCompat {
-
-    public static SettingsFragment newInstance() {
-        return new SettingsFragment();
-    }
-
-    @Override
-    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
-        addPreferencesFromResource(R.xml.settings);
-    }
-}

+ 57 - 14
app/src/main/java/com/noahvogt/miniprojekt/ui/show/MessageShowFragment.java

@@ -1,12 +1,13 @@
 package com.noahvogt.miniprojekt.ui.show;
 
 
+import android.app.AlertDialog;
 import android.os.Bundle;
 import android.view.LayoutInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.EditText;
+import android.widget.Button;
 import android.widget.ImageButton;
 import android.widget.PopupMenu;
 import android.widget.TextView;
@@ -19,17 +20,21 @@ import androidx.lifecycle.Observer;
 import androidx.lifecycle.ViewModelProvider;
 
 import com.noahvogt.miniprojekt.R;
-import com.noahvogt.miniprojekt.ui.DataBase.Message;
-import com.noahvogt.miniprojekt.ui.slideshow.EmailViewModel;
+import com.noahvogt.miniprojekt.DataBase.Message;
+import com.noahvogt.miniprojekt.data.EmailViewModel;
 
 
 public class MessageShowFragment extends DialogFragment implements PopupMenu.OnMenuItemClickListener {
 
 
-    public EditText showTo;
-    public EditText showFrom;
+    public TextView showTo;
+    public TextView showFrom;
     public TextView showSubject;
     public TextView showMessage;
+    public TextView showDate;
+
+    public Button showBccButton;
+    public Button showCCButton;
 
     private static Message mCurrent;
     private static EmailViewModel mEmailViewModel;
@@ -73,20 +78,38 @@ public class MessageShowFragment extends DialogFragment implements PopupMenu.OnM
         ImageButton dotButton = view.findViewById(R.id.show_message_dots_button);
         ImageButton attachButton = view.findViewById(R.id.show_message_attach_button);
 
-        showTo = (EditText) view.findViewById(R.id.show_To);
-        showFrom = (EditText) view.findViewById(R.id.show_From);
+        showBccButton = view.findViewById(R.id.show_bcc);
+        showCCButton = view.findViewById(R.id.show_cc);
+
+        showTo = (TextView) view.findViewById(R.id.show_To);
+        showFrom = (TextView) view.findViewById(R.id.show_From);
         showSubject = (TextView) view.findViewById(R.id.show_Subject);
         showMessage = (TextView) view.findViewById(R.id.show_Message);
+        showDate = (TextView) view.findViewById(R.id.show_date);
 
-        showTo.setText(mCurrent.getFrom());
+        showTo.setText(mCurrent.getTo());
         showFrom.setText(mCurrent.getFrom());
         showSubject.setText(mCurrent.getSubject());
         showMessage.setText(mCurrent.getTextContent());
+        showDate.setText(mCurrent.getDate());
 
 
         // TODO: add cc + bcc functionality
 
         // button listeners
+        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);
+            }
+        });
 
         closeButton.setOnClickListener(new View.OnClickListener() {
             @Override
@@ -126,15 +149,35 @@ public class MessageShowFragment extends DialogFragment implements PopupMenu.OnM
                 return true;
             case R.id.create_message_spam:
                 Toast.makeText(getActivity(), "item spam clicked", Toast.LENGTH_LONG).show();
+                mEmailViewModel.updateMessage(mCurrent.getId(), "Spam");
                 return true;
-            case R.id.create_message_sent_to:
-                Toast.makeText(getActivity(), "item sent to clicked", Toast.LENGTH_LONG).show();
-                return true;
-            case R.id.create_message_move_to:
-                Toast.makeText(getActivity(), "item move to clicked", Toast.LENGTH_LONG).show();
-                return true;
+            case R.id.create_message_move_archive:
+                Toast.makeText(getActivity(), "item archive clicked", Toast.LENGTH_LONG).show();
+                mEmailViewModel.updateMessage(mCurrent.getId(), "Archive");
+
+
             default: // this case should never occur
                 return false;
         }
     }
+
+    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);
+        TextView mBcc = bccPopupView.findViewById(R.id.show_listBcc);
+
+        alertDialog.setView(bccPopupView);
+        dialog = alertDialog.create();
+        dialog.show();
+
+        if (bcc){
+            mBcc.setText(mCurrent.getBcc());
+        }else {
+            mBcc.setText(mCurrent.getCc());
+        }
+
+
+
+    }
 }

+ 7 - 4
app/src/main/java/com/noahvogt/miniprojekt/ui/slideshow/DraftFragment.java

@@ -16,11 +16,12 @@ import androidx.lifecycle.ViewModelProvider;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
 
+import com.noahvogt.miniprojekt.data.EmailViewModel;
 import com.noahvogt.miniprojekt.MainActivity;
 import com.noahvogt.miniprojekt.R;
-import com.noahvogt.miniprojekt.ui.DataBase.Message;
-import com.noahvogt.miniprojekt.ui.home.CustomAdapter;
-import com.noahvogt.miniprojekt.ui.show.MessageShowFragment;
+import com.noahvogt.miniprojekt.DataBase.Message;
+import com.noahvogt.miniprojekt.data.CustomAdapter;
+import com.noahvogt.miniprojekt.MessageCreateFragment;
 
 public class  DraftFragment extends Fragment implements CustomAdapter.SelectedMessage{
 
@@ -68,9 +69,11 @@ public class  DraftFragment extends Fragment implements CustomAdapter.SelectedMe
 
     @Override
     public void selectedMessage(Message messages, EmailViewModel emailViewModel) {
+        MessageCreateFragment messageCreateFragment = new MessageCreateFragment();
 
+        //TODO: make this Fragment editable
         AppCompatActivity activity = (AppCompatActivity) getContext();
-        DialogFragment dialog = MessageShowFragment.newInstance(messages, mEmailViewModel);
+        DialogFragment dialog = messageCreateFragment.getMessage(messages, emailViewModel, messageCreateFragment);
         dialog.show(activity.getSupportFragmentManager(), "tag");
     }
 }

+ 3 - 3
app/src/main/java/com/noahvogt/miniprojekt/ui/spam/SpamFragment.java

@@ -18,10 +18,10 @@ import androidx.recyclerview.widget.RecyclerView;
 
 import com.noahvogt.miniprojekt.MainActivity;
 import com.noahvogt.miniprojekt.R;
-import com.noahvogt.miniprojekt.ui.DataBase.Message;
-import com.noahvogt.miniprojekt.ui.home.CustomAdapter;
+import com.noahvogt.miniprojekt.DataBase.Message;
+import com.noahvogt.miniprojekt.data.CustomAdapter;
 import com.noahvogt.miniprojekt.ui.show.MessageShowFragment;
-import com.noahvogt.miniprojekt.ui.slideshow.EmailViewModel;
+import com.noahvogt.miniprojekt.data.EmailViewModel;
 
 public class SpamFragment extends Fragment implements CustomAdapter.SelectedMessage{
 

+ 58 - 9
app/src/main/python/mailFunctions.py

@@ -1,6 +1,15 @@
 import imaplib, smtplib, ssl, email, os
 from itertools import chain
 
+mSubject = ""
+mFrom = ""
+mCC = ""
+mBcc = ""
+mTo = ""
+mDate = ""
+mContent = ""
+output_list= []
+
 # format raw string you get from fetching mails
 def stringCompiling(inputIterable):
     # remove first nested iterables
@@ -80,25 +89,27 @@ def fetchMails(connection, inbox, outputType):
     #N = 3
     # total number of emails
     messages_int = int(messages[0])
-    print("message_int------\n" + str(messages_int))
+    #print("message_int------\n" + str(messages_int))
 
     typ, data = connection.search(None, 'ALL')
-    output_list = []
+    global output_list
+
     for num in data[0].split():
         if outputType == "dict":
             output_dict = {}
         else:
             inner_output_list = []
+
         typ, data = connection.fetch(num, '(RFC822)')
         msg = email.message_from_bytes(data[0][1])
 
         #print(msg)
-        print(num)
+        #print(num)
 
         raw_string = email.header.decode_header(msg['Subject'])[0]
-        print("raw_string: " + str(raw_string))
+        #print("raw_string: " + str(raw_string))
         raw_from = email.header.decode_header(msg['From'])
-        print("raw_from" + str(raw_from))
+        #print("raw_from" + str(raw_from))
         try:
             raw_to = email.header.decode_header(msg['To'])
         except TypeError:
@@ -111,9 +122,9 @@ def fetchMails(connection, inbox, outputType):
             raw_bcc = email.header.decode_header(msg['BCC'])
         except TypeError:
             raw_bcc = [""]
-        print("raw_to" + str(raw_to))
+        #print("raw_to" + str(raw_to))
         raw_date = email.header.decode_header(msg['Date'])[0]
-        print("raw_to" + str(raw_date))
+        #print("raw_to" + str(raw_date))
 
         raw_msg = str(msg)
 
@@ -144,14 +155,24 @@ def fetchMails(connection, inbox, outputType):
             output_list.append(output_dict)
         else:
             inner_output_list.append(subject)
-            inner_output_list.append(stringCompiling(subject))
+            inner_output_list.append(stringCompiling(raw_from))
             inner_output_list.append(stringCompiling(raw_cc))
             inner_output_list.append(stringCompiling(raw_bcc))
             inner_output_list.append(stringCompiling(raw_to))
             inner_output_list.append(stringCompiling(raw_date))
             inner_output_list.append(primitive_body)
 
-            output_list.append(inner_output_dict)
+            output_list.append(inner_output_list)
+
+            global mSubject, mFrom, mCC, mContent, mBcc, mTo, mDate
+            print("subject " + subject)
+            mSubject = subject
+            mFrom = stringCompiling(raw_from)
+            mCC = stringCompiling(raw_cc)
+            mBcc = stringCompiling(raw_bcc)
+            mTo = stringCompiling(raw_to)
+            mDate = stringCompiling(raw_date)
+            mContent = primitive_body
 
 
     connection.close()
@@ -159,6 +180,34 @@ def fetchMails(connection, inbox, outputType):
 
     return output_list
 
+def printSubject(messageIndex):
+    print(output_list[messageIndex][0])
+    return output_list[messageIndex][0]
+
+def printFrom(messageIndex):
+    print(output_list[messageIndex][1])
+    return mFrom
+
+def printCc(messageIndex):
+    print(output_list[messageIndex][2])
+    return mCC
+
+def printBcc(messageIndex):
+    print(output_list[messageIndex][3])
+    return mBcc
+
+def printTo(messageIndex):
+    print(output_list[messageIndex][4])
+    return mTo
+
+def printDate(messageIndex):
+    print(output_list[messageIndex][5])
+    return mDate
+
+def printContent(messageIndex):
+    print(output_list[messageIndex][6])
+    return mContent
+
 def sendStarttls(host, sendingMail, receivingMail, password, message="", subject="", port=587, cc=[], bcc=[]):
     context = ssl.create_default_context()
 

+ 8 - 0
app/src/main/res/drawable/textview_border.xml

@@ -0,0 +1,8 @@
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle" >
+
+    <stroke
+        android:width="2dp"
+        android:color="#EB663CBA" />
+
+</shape>

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

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

+ 16 - 0
app/src/main/res/layout/cc_bcc_popup.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <TextView
+        android:id="@+id/show_listBcc"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 7 - 7
app/src/main/res/layout/fragment_home.xml

@@ -14,12 +14,12 @@
         android:layout_column="0"
         android:layout_row="0"
         android:layout_height="wrap_content"
-        android:layout_width="wrap_content"
+        android:layout_width="250dp"
         android:textSize="25dp"/>
 
     <TextView
         android:id="@+id/message"
-        android:layout_width="wrap_content"
+        android:layout_width="250dp"
         android:layout_height="match_parent"
         android:layout_row="2"
         android:layout_column="0"
@@ -29,7 +29,7 @@
 
     <TextView
         android:id="@+id/subject"
-        android:layout_width="wrap_content"
+        android:layout_width="250dp"
         android:layout_height="match_parent"
         android:layout_row="1"
         android:layout_column="0"
@@ -40,12 +40,12 @@
 
     <TextView
         android:id="@+id/date"
-        android:textSize="20dp"
-        android:layout_width="wrap_content"
+        android:layout_width="81dp"
         android:layout_height="wrap_content"
         android:layout_row="0"
-        android:layout_column="3"
-        android:gravity="start" />
+        android:layout_column="2"
+        android:gravity="end"
+        android:textSize="20dp" />
 
 
 

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

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

+ 110 - 56
app/src/main/res/layout/message_show_fragment.xml

@@ -36,8 +36,8 @@
                 android:layout_width="56dp"
                 android:layout_height="match_parent"
 
-                android:layout_marginLeft="360dp"
-                android:layout_marginStart="360dp"
+                android:layout_marginStart="320dp"
+                android:layout_marginLeft="320dp"
                 android:background="?attr/selectableItemBackgroundBorderless"
                 android:padding="8dp"
                 android:src="@mipmap/ic_more_vert_dots_purple" />
@@ -48,15 +48,13 @@
                 android:layout_height="match_parent"
 
 
+                android:layout_marginStart="-114dp"
+                android:layout_marginLeft="-114dp"
                 android:layout_toEndOf="@id/show_message_dots_button"
-                android:layout_marginLeft="-110dp"
+                android:layout_toRightOf="@id/show_message_dots_button"
                 android:background="?attr/selectableItemBackgroundBorderless"
                 android:padding="8dp"
-                android:src="@mipmap/ic_attach_purple"
-                android:layout_toRightOf="@id/show_message_dots_button"
-                android:layout_marginStart="-110dp" />
-
-
+                android:src="@mipmap/ic_attach_purple" />
 
 
         </RelativeLayout>
@@ -73,11 +71,10 @@
             android:orientation="vertical"
             android:gravity="top">
 
-            <com.google.android.material.textfield.TextInputLayout
-                style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
-                android:id="@+id/create_message_sending_address_layout"
+            <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
+                android:background="@drawable/textview_border"
 
                 android:layout_marginStart="12dp"
                 android:layout_marginLeft="12dp"
@@ -86,29 +83,25 @@
                 android:layout_marginRight="12dp"
                 android:layout_marginBottom="12dp">
 
-                <com.google.android.material.textfield.TextInputEditText
-                style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
-                android:id="@+id/show_From"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
 
-                android:layout_marginStart="12dp"
-                android:layout_marginLeft="12dp"
-                android:layout_marginTop="12dp"
-                android:layout_marginEnd="12dp"
-                android:layout_marginRight="12dp"
-                android:layout_marginBottom="12dp" />
-            </com.google.android.material.textfield.TextInputLayout>
+                <TextView
+                    android:id="@+id/show_From"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:textAppearance="@style/TextAppearance.AppCompat.Body1"
 
-            <com.google.android.material.textfield.TextInputLayout
-                style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
-                android:id="@+id/show_message_receiving_address_layout"
+                    android:layout_marginStart="12dp"
+                    android:layout_marginLeft="12dp"
+                    android:layout_marginTop="12dp"
+                    android:layout_marginEnd="12dp"
+                    android:layout_marginRight="12dp"
+                    android:layout_marginBottom="12dp"/>
+            </LinearLayout>
+
+            <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-
-                android:clickable="false"
-                android:textIsSelectable="false"
-                android:freezesText="true"
+                android:background="@drawable/textview_border"
 
                 android:layout_marginStart="12dp"
                 android:layout_marginLeft="12dp"
@@ -117,28 +110,23 @@
                 android:layout_marginRight="12dp"
                 android:layout_marginBottom="12dp">
 
-                <com.google.android.material.textfield.TextInputEditText
-                    style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
+                <TextView
                     android:id="@+id/show_To"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginStart="12dp"
-
-                    android:clickable="false"
-                    android:textIsSelectable="false"
-                    android:freezesText="true"
+                    android:textAppearance="@style/TextAppearance.AppCompat.Body1"
 
                     android:layout_marginLeft="12dp"
                     android:layout_marginTop="12dp"
                     android:layout_marginEnd="12dp"
                     android:layout_marginRight="12dp"
                     android:layout_marginBottom="12dp" />
-            </com.google.android.material.textfield.TextInputLayout>
+            </LinearLayout>
 
 
-            <com.google.android.material.textfield.TextInputLayout
-                style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
-                android:id="@+id/show_message_subject_layout"
+            <LinearLayout
+                android:background="@drawable/textview_border"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
 
@@ -147,15 +135,14 @@
                 android:layout_marginTop="12dp"
                 android:layout_marginEnd="12dp"
                 android:layout_marginRight="12dp"
-                android:layout_marginBottom="12dp"
+                android:layout_marginBottom="12dp">
 
-                app:layout_constraintTop_toBottomOf="@+id/show_message_sending_address_layout"
-                tools:layout_editor_absoluteX="1dp">
 
-            <TextView
+                <TextView
                     android:id="@+id/show_Subject"
                     android:layout_width="match_parent"
                     android:layout_height="match_parent"
+                    android:textAppearance="@style/TextAppearance.AppCompat.Body1"
 
                     android:layout_marginStart="12dp"
                     android:layout_marginLeft="12dp"
@@ -163,11 +150,75 @@
                     android:layout_marginEnd="12dp"
                     android:layout_marginRight="12dp"
                     android:layout_marginBottom="12dp"/>
-            </com.google.android.material.textfield.TextInputLayout>
+            </LinearLayout>
 
-            <com.google.android.material.textfield.TextInputLayout
-                style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
-                android:id="@+id/show_message_body_layout"
+            <GridLayout
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+
+                android:layout_marginStart="12dp"
+                android:layout_marginLeft="12dp"
+                android:layout_marginTop="2dp"
+                android:layout_marginEnd="12dp"
+                android:layout_marginRight="12dp"
+                android:layout_marginBottom="2dp">
+
+                <Button
+                    android:id="@+id/show_cc"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+
+                    android:layout_marginStart="85dp"
+                    android:layout_marginLeft="85dp"
+                    android:layout_marginTop="0dp"
+                    android:layout_marginEnd="16dp"
+                    android:layout_marginRight="16dp"
+                    android:layout_marginBottom="0dp"
+                    android:text="@string/show_cc" />
+
+                <Button
+                    android:id="@+id/show_bcc"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+
+                    android:layout_row="0"
+                    android:layout_column="1"
+                    android:layout_marginStart="18dp"
+                    android:layout_marginLeft="18dp"
+                    android:layout_marginTop="0dp"
+                    android:layout_marginEnd="16dp"
+                    android:layout_marginRight="16dp"
+                    android:layout_marginBottom="0dp"
+                    android:text="@string/show_bcc" />
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+
+                    android:layout_column="0"
+                    android:layout_row="1"
+                    android:text="@string/show_date"
+                    android:textAppearance="@style/TextAppearance.AppCompat.Body1"
+                    android:textSize="20dp"/>
+
+                <TextView
+                    android:id="@+id/show_date"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+
+                    android:layout_column="1"
+                    android:layout_row="1"
+                    android:textAppearance="@style/TextAppearance.AppCompat.Body1"
+                    android:textSize="20dp"/>
+
+            </GridLayout>
+
+
+
+
+
+            <LinearLayout
+                android:background="@drawable/textview_border"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
 
@@ -176,19 +227,22 @@
                 android:layout_marginTop="12dp"
                 android:layout_marginEnd="12dp"
                 android:layout_marginRight="12dp"
-                android:layout_marginBottom="12dp"
-
-                app:layout_constraintTop_toBottomOf="@+id/show_message_sending_address_layout"
-                tools:layout_editor_absoluteX="1dp">
+                android:layout_marginBottom="12dp">
 
                 <TextView
                     android:id="@+id/show_Message"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:minHeight="160dp"
-                    android:textAlignment="viewStart"
-                    android:gravity="start" />
-            </com.google.android.material.textfield.TextInputLayout>
+                    android:minHeight="200dp"
+                    android:textAppearance="@style/TextAppearance.AppCompat.Body1"
+
+                    android:layout_marginStart="12dp"
+                    android:layout_marginLeft="12dp"
+                    android:layout_marginTop="12dp"
+                    android:layout_marginEnd="12dp"
+                    android:layout_marginRight="12dp"
+                    android:layout_marginBottom="12dp" />
+            </LinearLayout>
 
         </LinearLayout>
 

+ 4 - 4
app/src/main/res/menu/create_message_options_menu.xml

@@ -4,10 +4,10 @@
         android:title="@string/menu_spam"/>
     <item android:id="@+id/create_message_delete"
         android:title="@string/menu_delete"/>
-    <item android:id="@+id/create_message_sent_to"
-        android:title="@string/menu_sent_to"/>
-    <item android:id="@+id/create_message_move_to"
-        android:title="@string/menu_move_to"/>
+    <!--item android:id="@+id/create_message_sent_to"
+        android:title="@string/menu_sent_to"/-->
+    <!--item android:id="@+id/create_message_move_to"
+        android:title="@string/menu_move_to"/-->
     <item android:id="@+id/create_message_move_archive"
         android:title="@string/menu_move_archive"/>
 </menu>

+ 3 - 0
app/src/main/res/values/strings.xml

@@ -23,6 +23,9 @@
     <string name="show_To">To </string>
     <string name="show_subject">Subject</string>
     <string name="show_message">Message</string>
+    <string name="show_cc">See CC</string>
+    <string name="show_bcc">See BCC</string>
+    <string name="show_date">Message received at: </string>
 
     <string name="menu_delete">Delete</string>
     <string name="menu_move_to">Move to</string>

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

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
+    <!--TODO: change appearance of text when message read -->
     <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
         <item name="colorAccent">#3498db</item>
     </style>