Procházet zdrojové kódy

added Spam and Archive Folder

Simon Hammer před 3 roky
rodič
revize
09932ff848
24 změnil soubory, kde provedl 320 přidání a 20 odebrání
  1. 1 1
      app/src/main/java/com/noahvogt/miniprojekt/MainActivity.java
  2. 7 5
      app/src/main/java/com/noahvogt/miniprojekt/ui/DataBase/EmailRepository.java
  3. 32 0
      app/src/main/java/com/noahvogt/miniprojekt/ui/DataBase/EmailRoomDatabase.java
  4. 5 1
      app/src/main/java/com/noahvogt/miniprojekt/ui/DataBase/MessageDao.java
  5. 67 0
      app/src/main/java/com/noahvogt/miniprojekt/ui/archive/ArchiveFragment.java
  6. 19 0
      app/src/main/java/com/noahvogt/miniprojekt/ui/archive/ArchiveViewModel.java
  7. 11 13
      app/src/main/java/com/noahvogt/miniprojekt/ui/slideshow/EmailViewModel.java
  8. 66 0
      app/src/main/java/com/noahvogt/miniprojekt/ui/spam/SpamFragment.java
  9. 19 0
      app/src/main/java/com/noahvogt/miniprojekt/ui/spam/SpamViewModel.java
  10. 11 0
      app/src/main/res/drawable-anydpi/archive_icon.xml
  11. 11 0
      app/src/main/res/drawable-anydpi/spam_icon.xml
  12. binární
      app/src/main/res/drawable-hdpi/archive_icon.png
  13. binární
      app/src/main/res/drawable-hdpi/spam_icon.png
  14. binární
      app/src/main/res/drawable-mdpi/archive_icon.png
  15. binární
      app/src/main/res/drawable-mdpi/spam_icon.png
  16. binární
      app/src/main/res/drawable-xhdpi/archive_icon.png
  17. binární
      app/src/main/res/drawable-xhdpi/spam_icon.png
  18. binární
      app/src/main/res/drawable-xxhdpi/archive_icon.png
  19. binární
      app/src/main/res/drawable-xxhdpi/spam_icon.png
  20. 23 0
      app/src/main/res/layout/fragment_archive.xml
  21. 23 0
      app/src/main/res/layout/fragment_spam.xml
  22. 10 0
      app/src/main/res/menu/activity_main_drawer.xml
  23. 13 0
      app/src/main/res/navigation/mobile_navigation.xml
  24. 2 0
      app/src/main/res/values/strings.xml

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

@@ -109,7 +109,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
         // Passing each menu ID as a set of Ids because each
         // menu should be considered as top level destinations.
         mAppBarConfiguration = new AppBarConfiguration.Builder(
-                R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)
+                R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow, R.id.nav_archive, R.id.nav_spam)
                 .setDrawerLayout(drawer)
                 .build();
         NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);

+ 7 - 5
app/src/main/java/com/noahvogt/miniprojekt/ui/DataBase/EmailRepository.java

@@ -13,6 +13,7 @@ public class EmailRepository {
     private LiveData<List<Message>> mInboxMessage;
     private LiveData<List<Message>> mSentMessage;
     private LiveData<List<Message>> mArchiveMessage;
+    private LiveData<List<Message>> mSpamMessage;
 
 
     // Note that in order to unit test the WordRepository, you have to remove the Application
@@ -24,9 +25,10 @@ public class EmailRepository {
         EmailRoomDatabase db = EmailRoomDatabase.getDatabase(application);
         messageDao = db.messageDao();
         mDraftMessage = messageDao.getDraftMessages();
-       // mArchiveMessage = messageDao.getArchiveMessages();
+        mArchiveMessage = messageDao.getArchiveMessages();
         mInboxMessage = messageDao.getInboxMessages();
         mSentMessage = messageDao.getSentMessages();
+        mSpamMessage = messageDao.getSpamMessages();
     }
 
     // Room executes all queries on a separate thread.
@@ -36,9 +38,7 @@ public class EmailRepository {
         return mDraftMessage;
     }
 
-    public void deleteNewMessage(){
-        messageDao.deleteNewMessage();
-    }
+    public LiveData<List<Message>> getSpamMessage(){return mSpamMessage;}
 
     public LiveData<List<Message>> getInboxMessages() {
         return mInboxMessage;
@@ -52,7 +52,9 @@ public class EmailRepository {
         return mArchiveMessage;
     }
 
-
+    public void deleteNewMessage(){
+        messageDao.deleteNewMessage();
+    }
 
     // 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.

+ 32 - 0
app/src/main/java/com/noahvogt/miniprojekt/ui/DataBase/EmailRoomDatabase.java

@@ -80,6 +80,38 @@ public abstract class EmailRoomDatabase extends RoomDatabase{
                        true);
                dao.insert(word);
 
+               for (int n = 1; n < 20; n++) {
+                   word = new Message("Simon", null, null,
+                           "stefan", "tomorrow", "sent20", "lets goo","Sent",
+                           true);
+                   dao.insert(word);
+               }
+
+               for (int i = 1; i < 20; i++){
+                   word = new Message("Simon", null, null,
+                           "Hans", "tomorrow", "inbox20", "lets goo","Inbox",
+                           true);
+                   dao.insert(word);
+               }
+
+                for (int i = 1; i < 20; i++){
+                    word = new Message("Simon", null, null,
+                            "Jürgen", "tomorrow", "Draft20", "lets goo","Draft",
+                            true);
+                    dao.insert(word);
+                }
+
+                word = new Message("Simon", null, null,
+                        "Maurice", "yesterday", "ArchiveTest", "lets goo","Archive",
+                        true);
+                dao.insert(word);
+
+                word = new Message("Simon", null, null,
+                        "Lenny", "tomorrow", "SpamTest", "lets goo","Spam",
+                        true);
+                dao.insert(word);
+
+
             });
         }
     };

+ 5 - 1
app/src/main/java/com/noahvogt/miniprojekt/ui/DataBase/MessageDao.java

@@ -50,7 +50,7 @@ public interface MessageDao {
     LiveData<List<Message>> getDateMessages();
 
     /* get Draft messages*/
-    @Query("SELECT * FROM message_table WHERE folder='Draft' ORDER BY date ASC")
+    @Query("SELECT * FROM message_table WHERE folder LIKE 'Draft' ORDER BY date ASC")
     LiveData<List<Message>> getDraftMessages();
 
     /* get Inbox messages*/
@@ -65,6 +65,10 @@ public interface MessageDao {
     @Query("SELECT * FROM message_table WHERE folder LIKE 'Archive' ORDER BY date ASC")
     LiveData<List<Message>> getArchiveMessages();
 
+    /* get Spam messages*/
+    @Query("SELECT * FROM message_table WHERE folder LIKE 'Spam' ORDER BY date ASC")
+    LiveData<List<Message>> getSpamMessages();
+
 
 
 

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

@@ -0,0 +1,67 @@
+package com.noahvogt.miniprojekt.ui.archive;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.lifecycle.Observer;
+import androidx.lifecycle.ViewModelProvider;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.noahvogt.miniprojekt.MainActivity;
+import com.noahvogt.miniprojekt.R;
+import com.noahvogt.miniprojekt.ui.home.CustomAdapter;
+import com.noahvogt.miniprojekt.ui.slideshow.EmailViewModel;
+
+public class ArchiveFragment extends Fragment {
+
+    private ArchiveViewModel archiveViewModel;
+    EmailViewModel mEmailViewModel;
+    RecyclerView recyclerView;
+
+    public View onCreateView(@NonNull LayoutInflater inflater,
+                             ViewGroup container, Bundle savedInstanceState) {
+
+
+
+        recyclerView = MainActivity.recyclerView.findViewById(R.id.recyclerView);
+
+        final CustomAdapter adapter = new CustomAdapter(new CustomAdapter.EmailDiff());
+
+        /* 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.getArchiveMessage().observe(getViewLifecycleOwner(), messages -> {
+            /* Update the cached copy of the messages in the adapter*/
+            adapter.submitList(messages);
+        });
+
+
+        archiveViewModel =
+                new ViewModelProvider(this).get(ArchiveViewModel.class);
+        View root = inflater.inflate(R.layout.fragment_archive, container, false);
+        final TextView textView = root.findViewById(R.id.text_archive);
+        archiveViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
+            @Override
+            public void onChanged(@Nullable String s) {
+                textView.setText(s);
+            }
+        });
+        return root;
+
+
+
+
+    }
+
+
+}

+ 19 - 0
app/src/main/java/com/noahvogt/miniprojekt/ui/archive/ArchiveViewModel.java

@@ -0,0 +1,19 @@
+package com.noahvogt.miniprojekt.ui.archive;
+
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+import androidx.lifecycle.ViewModel;
+
+public class ArchiveViewModel extends ViewModel {
+
+    private MutableLiveData<String> mText;
+
+    public ArchiveViewModel() {
+        mText = new MutableLiveData<>();
+        mText.setValue("This is archive fragment");
+    }
+
+    public LiveData<String> getText() {
+        return mText;
+    }
+}

+ 11 - 13
app/src/main/java/com/noahvogt/miniprojekt/ui/slideshow/EmailViewModel.java

@@ -5,7 +5,6 @@ import android.app.Application;
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.AndroidViewModel;
 
-import com.noahvogt.miniprojekt.MainActivity;
 import com.noahvogt.miniprojekt.ui.DataBase.EmailRepository;
 import com.noahvogt.miniprojekt.ui.DataBase.Message;
 
@@ -18,7 +17,8 @@ public class EmailViewModel extends AndroidViewModel {
     private LiveData<List<Message>> mDraftMessage;
     private LiveData<List<Message>> mInboxMessage;
     private LiveData<List<Message>> mSentMessage;
-    private LiveData<List<Message>> mArchiveMassage;
+    private LiveData<List<Message>> mArchiveMessage;
+    private LiveData<List<Message>> mSpamMessage;
 
     public EmailViewModel(Application application) {
         super(application);
@@ -26,27 +26,25 @@ public class EmailViewModel extends AndroidViewModel {
         mDraftMessage = mEmailRepository.getDraftMessages();
         mInboxMessage = mEmailRepository.getInboxMessages();
         mSentMessage = mEmailRepository.getSentMessages();
-        mArchiveMassage = mEmailRepository.getArchiveMessages();
+        mArchiveMessage = mEmailRepository.getArchiveMessages();
+        mSpamMessage = mEmailRepository.getSpamMessage();
     }
 
     public LiveData<List<Message>> getDraftMessage(){
         return mDraftMessage;
     }
 
-    public void deleteNewMessage(){
-        mEmailRepository.deleteNewMessage();
-    }
-
-    public LiveData<List<Message>> getInboxMessage(){
-        return mInboxMessage;}
+    public LiveData<List<Message>> getSpamMessage(){return mSpamMessage;}
 
-    public LiveData<List<Message>> getSentMessage(){
-        return mSentMessage;}
+    public LiveData<List<Message>> getInboxMessage(){ return mInboxMessage;}
 
-    public LiveData<List<Message>> getArchiveMessage(){
-        return mArchiveMassage;}
+    public LiveData<List<Message>> getSentMessage(){ return mSentMessage;}
 
+    public LiveData<List<Message>> getArchiveMessage(){ return mArchiveMessage;}
 
+    public void deleteNewMessage(){
+        mEmailRepository.deleteNewMessage();
+    }
 
     public void insert(Message message){mEmailRepository.insert(message);}
 

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

@@ -0,0 +1,66 @@
+package com.noahvogt.miniprojekt.ui.spam;
+
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.lifecycle.Observer;
+import androidx.lifecycle.ViewModelProvider;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.noahvogt.miniprojekt.MainActivity;
+import com.noahvogt.miniprojekt.R;
+import com.noahvogt.miniprojekt.ui.home.CustomAdapter;
+import com.noahvogt.miniprojekt.ui.slideshow.EmailViewModel;
+
+public class SpamFragment extends Fragment {
+
+    private SpamViewModel spamViewModel;
+    EmailViewModel mEmailViewModel;
+    RecyclerView recyclerView;
+
+    public View onCreateView(@NonNull LayoutInflater inflater,
+                             ViewGroup container, Bundle savedInstanceState) {
+
+
+
+        recyclerView = MainActivity.recyclerView.findViewById(R.id.recyclerView);
+
+        final CustomAdapter adapter = new CustomAdapter(new CustomAdapter.EmailDiff());
+
+        /* 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.getSpamMessage().observe(getViewLifecycleOwner(), messages -> {
+            /* Update the cached copy of the messages in the adapter*/
+            adapter.submitList(messages);
+        });
+
+        // mEmailViewModel.deleteNewMessage();
+
+        spamViewModel =
+                new ViewModelProvider(this).get(SpamViewModel.class);
+        View root = inflater.inflate(R.layout.fragment_spam, container, false);
+        final TextView textView = root.findViewById(R.id.text_spam);
+        spamViewModel.getText().observe(getViewLifecycleOwner(), new Observer<String>() {
+            @Override
+            public void onChanged(@Nullable String s) {
+                textView.setText(s);
+            }
+        });
+        return root;
+
+
+
+
+    }
+}

+ 19 - 0
app/src/main/java/com/noahvogt/miniprojekt/ui/spam/SpamViewModel.java

@@ -0,0 +1,19 @@
+package com.noahvogt.miniprojekt.ui.spam;
+
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MutableLiveData;
+import androidx.lifecycle.ViewModel;
+
+public class SpamViewModel extends ViewModel {
+
+    private MutableLiveData<String> mText;
+
+    public SpamViewModel() {
+        mText = new MutableLiveData<>();
+        mText.setValue("This is Spam fragment");
+    }
+
+    public LiveData<String> getText() {
+        return mText;
+    }
+}

+ 11 - 0
app/src/main/res/drawable-anydpi/archive_icon.xml

@@ -0,0 +1,11 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24"
+    android:tint="#000000"
+    android:alpha="0.8">
+  <path
+      android:fillColor="@android:color/white"
+      android:pathData="M20.54,5.23l-1.39,-1.68C18.88,3.21 18.47,3 18,3H6c-0.47,0 -0.88,0.21 -1.16,0.55L3.46,5.23C3.17,5.57 3,6.02 3,6.5V19c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V6.5c0,-0.48 -0.17,-0.93 -0.46,-1.27zM12,17.5L6.5,12H10v-2h4v2h3.5L12,17.5zM5.12,5l0.81,-1h12l0.94,1H5.12z"/>
+</vector>

+ 11 - 0
app/src/main/res/drawable-anydpi/spam_icon.xml

@@ -0,0 +1,11 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24"
+    android:tint="#000000"
+    android:alpha="0.8">
+  <path
+      android:fillColor="@android:color/white"
+      android:pathData="M15.73,3L8.27,3L3,8.27v7.46L8.27,21h7.46L21,15.73L21,8.27L15.73,3zM12,17.3c-0.72,0 -1.3,-0.58 -1.3,-1.3 0,-0.72 0.58,-1.3 1.3,-1.3 0.72,0 1.3,0.58 1.3,1.3 0,0.72 -0.58,1.3 -1.3,1.3zM13,13h-2L11,7h2v6z"/>
+</vector>

binární
app/src/main/res/drawable-hdpi/archive_icon.png


binární
app/src/main/res/drawable-hdpi/spam_icon.png


binární
app/src/main/res/drawable-mdpi/archive_icon.png


binární
app/src/main/res/drawable-mdpi/spam_icon.png


binární
app/src/main/res/drawable-xhdpi/archive_icon.png


binární
app/src/main/res/drawable-xhdpi/spam_icon.png


binární
app/src/main/res/drawable-xxhdpi/archive_icon.png


binární
app/src/main/res/drawable-xxhdpi/spam_icon.png


+ 23 - 0
app/src/main/res/layout/fragment_archive.xml

@@ -0,0 +1,23 @@
+<?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"
+    tools:context=".ui.archive.ArchiveFragment">
+
+    <TextView
+        android:id="@+id/text_archive"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="8dp"
+        android:layout_marginEnd="8dp"
+        android:layout_gravity="center_horizontal"
+        android:textAlignment="center"
+        android:textSize="20sp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 23 - 0
app/src/main/res/layout/fragment_spam.xml

@@ -0,0 +1,23 @@
+<?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"
+    tools:context=".ui.spam.SpamFragment">
+
+    <TextView
+        android:id="@+id/text_spam"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="8dp"
+        android:layout_marginTop="8dp"
+        android:layout_marginEnd="8dp"
+        android:layout_gravity="center_horizontal"
+        android:textAlignment="center"
+        android:textSize="20sp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 10 - 0
app/src/main/res/menu/activity_main_drawer.xml

@@ -16,5 +16,15 @@
             android:id="@+id/nav_slideshow"
             android:icon="@drawable/drafts_icon"
             android:title="@string/drawer_drafts" />
+
+        <item
+            android:id="@+id/nav_archive"
+            android:icon="@drawable/archive_icon"
+            android:title="@string/drawer_archive" />
+
+        <item
+            android:id="@+id/nav_spam"
+            android:icon="@drawable/spam_icon"
+            android:title="@string/drawer_spam" />
     </group>
 </menu>

+ 13 - 0
app/src/main/res/navigation/mobile_navigation.xml

@@ -22,4 +22,17 @@
         android:name="com.noahvogt.miniprojekt.ui.slideshow.DraftFragment"
         android:label="@string/drawer_drafts"
         tools:layout="@layout/fragment_slideshow" />
+
+    <fragment
+        android:id="@+id/nav_archive"
+        android:name="com.noahvogt.miniprojekt.ui.archive.ArchiveFragment"
+        android:label="@string/drawer_archive"
+        tools:layout="@layout/fragment_archive" />
+
+    <fragment
+        android:id="@+id/nav_spam"
+        android:name="com.noahvogt.miniprojekt.ui.spam.SpamFragment"
+        android:label="@string/drawer_spam"
+        tools:layout="@layout/fragment_spam" />
+
 </navigation>

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

@@ -10,6 +10,8 @@
     <string name="drawer_inbox">Inbox</string>
     <string name="drawer_sent">Sent</string>
     <string name="drawer_drafts">Drafts</string>
+    <string name="drawer_archive">Archive</string>
+    <string name="drawer_spam">Spam</string>
     <string name="your_password_filler">Your Password</string>
     <string name="your_email_address_filler">Your Email Address</string>
     <string name="your_full_name_filler">Your Full Name</string>