Bläddra i källkod

emails change with account, maybe bug with opening mails

Simon Hammer 3 år sedan
förälder
incheckning
098f932bed

+ 9 - 3
app/schemas/com.noahvogt.miniprojekt.DataBase.EmailRoomDatabase/1.json

@@ -2,11 +2,11 @@
   "formatVersion": 1,
   "database": {
     "version": 1,
-    "identityHash": "217605d4a5ec0067e9003ad5b099a303",
+    "identityHash": "22874ef127ac5669572671e40c064f64",
     "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)",
+        "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `user` TEXT 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",
@@ -14,6 +14,12 @@
             "affinity": "INTEGER",
             "notNull": true
           },
+          {
+            "fieldPath": "mUser",
+            "columnName": "user",
+            "affinity": "TEXT",
+            "notNull": true
+          },
           {
             "fieldPath": "mTo",
             "columnName": "to",
@@ -82,7 +88,7 @@
     "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')"
+      "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '22874ef127ac5669572671e40c064f64')"
     ]
   }
 }

+ 12 - 9
app/src/main/java/com/noahvogt/miniprojekt/DataBase/EmailRepository.java

@@ -6,6 +6,8 @@ import androidx.lifecycle.LiveData;
 
 import java.util.List;
 
+import static com.noahvogt.miniprojekt.MainActivity.userGlobal;
+
 public class EmailRepository {
 
     private MessageDao messageDao;
@@ -18,7 +20,6 @@ public class EmailRepository {
     private List<Message> mAllMessages;
 
 
-
     // Note that in order to unit test the WordRepository, you have to remove the Application
     // dependency. This adds complexity and much more code, and this sample is not about testing.
     // See the BasicSample in the android-architecture-components repository at
@@ -27,11 +28,11 @@ public class EmailRepository {
     public EmailRepository(Application application) {
         EmailRoomDatabase db = EmailRoomDatabase.getDatabase(application);
         messageDao = db.messageDao();
-        mInboxLiveMessage = messageDao.getLiveInboxMessages();
-        mDraftLiveMessage = messageDao.getLiveDraftMessages();
-        mArchiveLiveMessage = messageDao.getLiveArchiveMessages();
-        mSentLiveMessage = messageDao.getLiveSentMessages();
-        mSpamLiveMessage = messageDao.getLiveSpamMessages();
+        mInboxLiveMessage = messageDao.getLiveInboxMessages(userGlobal);
+        mDraftLiveMessage = messageDao.getLiveDraftMessages(userGlobal);
+        mArchiveLiveMessage = messageDao.getLiveArchiveMessages(userGlobal);
+        mSentLiveMessage = messageDao.getLiveSentMessages(userGlobal);
+        mSpamLiveMessage = messageDao.getLiveSpamMessages(userGlobal);
     }
 
     // Room executes all queries on a separate thread.
@@ -55,10 +56,12 @@ public class EmailRepository {
         return mArchiveLiveMessage;
     }
 
-    /* problems with main Thread
-    public List<Message> getAllMessages(){ return mAllMessages;}
+    /*problems with main Thread */
+    public List<Message> getAllMessages(){
+        //mAllMessages = messageDao.getAllMessages();
+        return mAllMessages;}
+
 
-     */
 
     // You must call this on a non-UI thread or your app will throw an exception. Room ensures
     // that you're not doing any long running operations on the main thread, blocking the UI.

+ 12 - 0
app/src/main/java/com/noahvogt/miniprojekt/DataBase/Message.java

@@ -16,6 +16,10 @@ public class Message {
 
     @PrimaryKey (autoGenerate = true)
     public int id;
+    
+    @NonNull
+    @ColumnInfo(name = "user")
+    private String mUser;
 
     /* name of Columm */
     @NonNull
@@ -58,6 +62,8 @@ public class Message {
     @SerializedName("seen")
     private boolean mSeen;
 
+    public String getUser(){return this.mUser;}
+
     public String getTo(){return this.mTo;}
 
     public String getFrom(){return this.mFrom;}
@@ -78,7 +84,12 @@ public class Message {
 
     public boolean isSeen() {return this.mSeen;}
 
+    public void putUser(String user){ this.mUser = user;}
+
+    public void putDate(String date){this.mDate = date;}
+
     public Message(
+            @NonNull String user,
             @NonNull String to,
             String cc,
             String bcc,
@@ -97,6 +108,7 @@ public class Message {
         this.mTextContent = textContent;
         this.mFolder = folder;
         this.mSeen = seen;
+        this.mUser = user;
     }
 
 }

+ 10 - 11
app/src/main/java/com/noahvogt/miniprojekt/DataBase/MessageDao.java

@@ -34,7 +34,6 @@ public interface MessageDao {
     @Query("UPDATE message_table SET date = :date WHERE id = :id")
     void updateDate(int id, String date);
 
-
     @Query("SELECT * FROM message_table ORDER BY id ASC")
     List<Message> getAllMessages();
 
@@ -43,36 +42,36 @@ public interface MessageDao {
     LiveData<List<Message>> getDateMessages();
 
     /* get Draft messages*/
-    @Query("SELECT * FROM message_table WHERE folder LIKE 'Draft' ORDER BY date DESC")
-    LiveData<List<Message>> getLiveDraftMessages();
+    @Query("SELECT * FROM message_table WHERE user = :user AND folder LIKE 'Draft' ORDER BY date DESC")
+    LiveData<List<Message>> getLiveDraftMessages(String user);
 
     @Query("SELECT * FROM message_table WHERE folder LIKE 'Draft' ORDER BY date DESC")
     List<Message> getDraftMessages();
 
     /* get Inbox messages*/
-    @Query("SELECT * FROM message_table WHERE folder LIKE 'Inbox' ORDER BY date DESC")
-    LiveData<List<Message>> getLiveInboxMessages();
+    @Query("SELECT * FROM message_table WHERE user = :user AND folder LIKE 'Inbox' ORDER BY date DESC")
+    LiveData<List<Message>> getLiveInboxMessages(String user);
 
     @Query("SELECT * FROM message_table WHERE folder LIKE 'Inbox' ORDER BY date DESC")
     List<Message> getInboxMessages();
 
     /* get Sent messages*/
-    @Query("SELECT * FROM message_table WHERE folder LIKE 'Sent' ORDER BY date DESC")
-    LiveData<List<Message>> getLiveSentMessages();
+    @Query("SELECT * FROM message_table WHERE user = :user AND folder LIKE 'Sent' ORDER BY date DESC")
+    LiveData<List<Message>> getLiveSentMessages(String user);
 
     @Query("SELECT * FROM message_table WHERE folder LIKE 'Sent' ORDER BY date DESC")
     List<Message> getSentMessages();
 
     /* get Archive messages*/
-    @Query("SELECT * FROM message_table WHERE folder LIKE 'Archive' ORDER BY date DESC")
-    LiveData<List<Message>> getLiveArchiveMessages();
+    @Query("SELECT * FROM message_table WHERE user = :user AND folder LIKE 'Archive' ORDER BY date DESC")
+    LiveData<List<Message>> getLiveArchiveMessages(String user);
 
     @Query("SELECT * FROM message_table WHERE folder LIKE 'Archive' ORDER BY date DESC")
     List<Message> getArchiveMessages();
 
     /* get Spam messages*/
-    @Query("SELECT * FROM message_table WHERE folder LIKE 'Spam' ORDER BY date DESC")
-    LiveData<List<Message>> getLiveSpamMessages();
+    @Query("SELECT * FROM message_table WHERE user = :user AND folder LIKE 'Spam' ORDER BY date DESC")
+    LiveData<List<Message>> getLiveSpamMessages(String user);
 
     @Query("SELECT * FROM message_table WHERE folder LIKE 'Spam' ORDER BY date DESC")
     List<Message> getSpamMessages();

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

@@ -6,16 +6,13 @@ import android.content.Intent;
 import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.util.Log;
-import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
 import android.view.View;
-import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
 import android.widget.AutoCompleteTextView;
 import android.widget.Button;
 import android.widget.EditText;
-import android.widget.PopupMenu;
 import android.widget.TextView;
 import android.widget.Toast;
 
@@ -27,7 +24,6 @@ import androidx.fragment.app.DialogFragment;
 
 
 import com.google.android.material.floatingactionbutton.FloatingActionButton;
-import com.google.gson.GsonBuilder;
 import com.google.gson.reflect.TypeToken;
 import com.noahvogt.miniprojekt.DataBase.Message;
 
@@ -44,21 +40,16 @@ import androidx.navigation.NavController;
 import androidx.navigation.Navigation;
 import androidx.navigation.ui.AppBarConfiguration;
 import androidx.navigation.ui.NavigationUI;
-import androidx.work.Data;
 
 import com.chaquo.python.Python;
 import com.chaquo.python.android.AndroidPlatform;
-import com.google.android.material.snackbar.Snackbar;
 import com.noahvogt.miniprojekt.data.CustomAdapter;
-import com.noahvogt.miniprojekt.data.DeleteThread;
 import com.noahvogt.miniprojekt.data.EmailViewModel;
 import com.noahvogt.miniprojekt.data.MailFunctions;
 import com.noahvogt.miniprojekt.workers.DownloadWorker;
 import com.noahvogt.miniprojekt.ui.show.MessageShowFragment;
-import com.noahvogt.miniprojekt.data.BooleanTypeAdapter;
 
 import java.lang.reflect.Type;
-import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
@@ -69,9 +60,6 @@ import com.google.gson.Gson;
 
 
 import static com.noahvogt.miniprojekt.R.id.drawer_layout;
-import static com.noahvogt.miniprojekt.R.id.exitButton;
-
-import org.w3c.dom.Text;
 
 public class MainActivity extends AppCompatActivity implements View.OnClickListener, CustomAdapter.SelectedMessage {
 
@@ -85,6 +73,8 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
     public static RecyclerView recyclerView;
     private Boolean clicked = false;
 
+    public static String userGlobal;
+
     private AlertDialog dialog;
     private EditText newemail_name, newemail_email, newemail_password; /* may not be private */
 
@@ -111,6 +101,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
 
     }
 
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -164,6 +155,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
                     showCurrentUserObject.setText("current user:\nNone");
                 } else {
                     showCurrentUserObject.setText(String.format("current user:\n%s", currentUser));
+                    userGlobal = currentUser;
                 }
 
                 SharedPreferences.Editor credEditor = credReader.edit();
@@ -200,11 +192,15 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
                         String jsonCredData = credReader.getString("data", "");
                         Type credentialsType = new TypeToken<ArrayList<MailServerCredentials>>(){}.getType();
                         ArrayList<MailServerCredentials> currentUsersCredentials = gson.fromJson(jsonCredData, credentialsType);
+                        showToast("clicked switch");
 
                         try {
                             for (int i = 0; i < currentUsersCredentials.size(); i++) {
+                                showToast("Credentials: "+ currentUsersCredentials.get(i).getUsername());
+                                showToast("userInput: " + userInput);
                                 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);
@@ -225,6 +221,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
                         String jsonCredData = credReader.getString("data", "");
                         Type credentialsType = new TypeToken<ArrayList<MailServerCredentials>>(){}.getType();
                         ArrayList<MailServerCredentials> currentUserCredentials = gson.fromJson(jsonCredData, credentialsType);
+                        showToast("clicked delete account");
 
                         try {
                             for (int i = 0; i < currentUserCredentials.size(); i++) {
@@ -232,7 +229,6 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
                                     currentUserCredentials.remove(i);
 
                                     /* live update adapter for dropdown menu */
-
                                     int k = 0;
                                     String[] newUserArray = new String[finalUserArray.length - 1];
                                     for (String s : finalUserArray) {
@@ -254,9 +250,11 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
                                         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);
@@ -374,7 +372,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
             System.out.println(dNow);
 
          //   if (requestCode == NEW_WORD_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) {
-                Message word = new Message(
+                Message word = new Message(userGlobal,
                         MessageCreateFragment.replyIntent.getStringExtra(MessageCreateFragment.EXTRA_TO),
                         MessageCreateFragment.replyIntent.getStringExtra(MessageCreateFragment.EXTRA_CC),
                         MessageCreateFragment.replyIntent.getStringExtra(MessageCreateFragment.EXTRA_BCC),
@@ -538,10 +536,6 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
 
     public static MailServerCredentials newMailServerCredentials;
     public static SharedPreferences.Editor credentialsEditor;
-    String name;
-    String email;
-    String password;
-    Data.Builder builder = new Data.Builder();
 
     public void addNewAccountCredentials(String name, String email, String password, int imapPort,
                                          int smtpPort, String imapHost, String smtpHost, DialogInterface dialogContext,
@@ -665,19 +659,14 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
                 String email = newemail_email.getText().toString();
                 String password = newemail_password.getText().toString();
 
-                builder = new Data.Builder();
-                builder.putString(emailData, email)
-                        .putString(passwordData, password)
-                        .putString(nameData, name);
-
-
                 if (!MailFunctions.validateEmail(newemail_email) | !MailFunctions.validateName(newemail_name) | !MailFunctions.validatePassword(newemail_password)) {
                     return;
                 }
 
                 addNewAccountCredentials(name, email, password, 993, 587, MailFunctions.getImapHostFromEmail(email),
                         MailFunctions.getSmtpHostFromEmail(email), rootCreateNewEmailPopupDialog, true, headerView);
-                mEmailViewModel.applyDownload(builder.build());
+                mEmailViewModel.applyDownload();
+                userGlobal = email;
                 dialog.dismiss();
         }});
 
@@ -714,7 +703,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
                 createInformation(false,null);
                 return true;
             case R.id.action_refresh:
-                mEmailViewModel.applyDownload(builder.build());
+                mEmailViewModel.applyDownload();
                 return true;
             case R.id.action_deletefolder:
                 showToast("clicked delete all");

+ 9 - 1
app/src/main/java/com/noahvogt/miniprojekt/data/EmailViewHolder.java

@@ -3,6 +3,7 @@ package com.noahvogt.miniprojekt.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;
 import android.view.ViewGroup;
@@ -27,6 +28,7 @@ public class EmailViewHolder extends RecyclerView.ViewHolder {
     private final TextView subjectItemView;
     private final TextView dateItemView;
     private final TextView messageItemView;
+    private final String TAG = EmailViewHolder.class.getSimpleName();
 
 
     private EmailViewHolder(View itemView,
@@ -40,9 +42,15 @@ public class EmailViewHolder extends RecyclerView.ViewHolder {
         System.out.println("Called EmailViewHolder");
         
         itemView.setOnClickListener(new View.OnClickListener() {
+
             @Override
             public void onClick(View v) {
-                selectedMessage.selectedMessage(messageList.get(getBindingAdapterPosition()), null );
+                try {
+                    selectedMessage.selectedMessage(messageList.get(getBindingAdapterPosition()), null);
+                } catch (Throwable throwable){
+                    Toast.makeText(itemView.getContext(), "Could not open this Message", Toast.LENGTH_SHORT).show();
+                    Log.e(TAG, "Error by opening Message", throwable);
+                }
             }
         });
     }

+ 6 - 3
app/src/main/java/com/noahvogt/miniprojekt/data/EmailViewModel.java

@@ -26,6 +26,7 @@ public class EmailViewModel extends AndroidViewModel {
     private LiveData<List<Message>> mSentMessage;
     private LiveData<List<Message>> mArchiveMessage;
     private LiveData<List<Message>> mSpamMessage;
+    private List<Message> mAllMessages;
 
     String sent;
     String spam;
@@ -42,13 +43,13 @@ public class EmailViewModel extends AndroidViewModel {
         mSentMessage = mEmailRepository.getSentMessages();
         mArchiveMessage = mEmailRepository.getArchiveMessages();
         mSpamMessage = mEmailRepository.getSpamMessage();
+        //mAllMessages = mEmailRepository.getAllMessages();
     }
 
     /*requests Worker and applies password, email to it */
-    public void applyDownload(Data data){
+    public void applyDownload(){
         OneTimeWorkRequest downloadRequest =
                 new OneTimeWorkRequest.Builder(DownloadWorker.class)
-                        .setInputData(data)
                         .build();
 
         mWorkManager.enqueue(downloadRequest);
@@ -117,7 +118,9 @@ public class EmailViewModel extends AndroidViewModel {
 
     public LiveData<List<Message>> getArchiveMessage(){ return mArchiveMessage;}
 
-    //public List<Message> getAllMessages(){return mAllMessages;}
+    public List<Message> getAllMessages(){
+        mAllMessages = mEmailRepository.getAllMessages();
+        return mAllMessages;}
 
     public void insert(Message message){mEmailRepository.insert(message);}
 

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

@@ -55,7 +55,7 @@ public class HomeFragment extends Fragment implements CustomAdapter.SelectedMess
             adapter.getList(messages);
             /*gives list of messages to EmailViewModel */
             MainActivity.mEmailViewModel.setListAll(messages, "Inbox");
-
+            //mEmailViewModel.getAllMessages();
         });
 
 

+ 5 - 9
app/src/main/java/com/noahvogt/miniprojekt/workers/DownloadWorker.java

@@ -85,13 +85,8 @@ public class DownloadWorker extends Worker {
                 List folders =  MailFunctions.listMailboxes(MailFunctions.getIMAPConnection(mImapHost,
                         mUser, mPassword, mImapPort));
 
-                /*deletes all folders that were clicked*/
-                if (mEmailViewModel.getAll(false).size() > 0) {
-                    for (int delete = 0; delete < mEmailViewModel.getAll(false).size(); delete++) {
-                        mEmailViewModel.deleteMessage(mEmailViewModel.getAll(false).get(delete));
-                    }
-                }
-                mEmailViewModel.getAll(true);
+
+                //mEmailViewModel.getAll(true);
 
                 for (int i = 0; i < folders.size(); i++) {
                     String folderName;
@@ -112,7 +107,7 @@ public class DownloadWorker extends Worker {
                             folderNow.equals("DRAFTS") || folderNow.equals("Entw&APw-rfe")  )  {
                         folderName = "Draft";
                     } else if (folderNow.equals("Spam") || folderNow.equals("SPAM") || folderNow.equals("Bulk Mail")  ||
-                            folderNow.equals("bulk mail")){
+                            folderNow.equals("bulk mail") || folderNow.equals("Spamverdacht")){
                         folderName = "Spam";
                     }
                     else {
@@ -133,7 +128,8 @@ public class DownloadWorker extends Worker {
                     ArrayList<Message> messages = gson.fromJson(fetchedMails, messageType);
                     for (int k = 0; k < messages.size(); k++) {
                         Message message = messages.get(k);
-                        //System.out.println("oldDate: " + message.getDate());
+                        message.putUser(currentUser);
+                        System.out.println("oldDate: " + message.getDate());
                         //SimpleDateFormat rawDate = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
                         //SimpleDateFormat date = new SimpleDateFormat("dd.MM.yy");
                         //Date middleDate = rawDate.parse(message.getDate());

+ 2 - 2
app/src/main/res/layout/account_manager.xml

@@ -49,7 +49,7 @@
         android:id="@+id/deleteAccountButton"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:text="delete account"
+        android:text="@string/text_delete_account"
         android:layout_marginTop="16dp"
         android:layout_marginBottom="16dp"
         app:layout_constraintEnd_toEndOf="parent"
@@ -60,7 +60,7 @@
         android:id="@+id/switchToAccountButton"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:text="switch to account"
+        android:text="@string/text_switch_account"
         android:layout_marginTop="16dp"
         android:layout_marginBottom="16dp"
         app:layout_constraintEnd_toEndOf="parent"

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

@@ -49,6 +49,9 @@
     <string name="text_create_message">Create Message</string>
     <string name="text_ok">Okay</string>
 
+    <string name="text_delete_account">Delete selected account</string>
+    <string name="text_switch_account">Switch to selected account</string>
+
     <string name="text_welcome">
         Hello friendly user. \n
         When creating an account,