Bläddra i källkod

finally finished my shit

Simon Hammer 3 år sedan
förälder
incheckning
d76e957655

+ 42 - 1
maturText/lit/refs.bib

@@ -93,7 +93,8 @@ note = {(Accessed on 19/09/2021)}
   isbn={9780201612479},
   lccn={00029314},
   year={2001},
-  publisher={Addison-Wesley}
+  publisher={Addison-Wesley},
+  pages={4}
 }
 @book{sqlInfo,
   title={Principles of Database Systems with Internet and Java Applications},
@@ -259,3 +260,43 @@ url = {https://www.cs.cmu.edu/~rjsimmon/15122-s13/rec/07.pdf},
 urldate = {2021},
 note = {(Accessed on 13/10/2021)}
 }
+@misc{RecViewApp,
+author = {Anonym},
+title = {views-widgets-samples/RecyclerView at main · android/views-widgets-samples · GitHub},
+howpublished = {\url{https://github.com/android/views-widgets-samples/tree/main/RecyclerView}},
+month = {},
+year = {},
+note = {(Accessed on 14/10/2021)}
+}
+@misc{fragment,
+author = {Developers},
+title = {Fragments  |  Android Developers},
+howpublished = {\url{https://developer.android.com/guide/fragments}},
+month = {},
+year = {},
+note = {(Accessed on 15/10/2021)}
+}
+@misc{liveData,
+author = {Developers},
+title = {LiveData  |  Android Developers},
+howpublished = {\url{https://developer.android.com/reference/androidx/lifecycle/LiveData}},
+month = {},
+year = {},
+note = {(Accessed on 15/10/2021)}
+}
+@misc{observer,
+author = {Developers},
+title = {Observer  |  Android Developers},
+howpublished = {\url{https://developer.android.com/reference/java/util/Observer}},
+month = {},
+year = {},
+note = {(Accessed on 15/10/2021)}
+}
+@misc{intent,
+author = {developers},
+title = {Intent  |  Android Developers},
+howpublished = {\url{https://developer.android.com/reference/android/content/Intent}},
+month = {},
+year = {},
+note = {(Accessed on 15/10/2021)}
+}

BIN
maturText/media/EW.png


BIN
maturText/media/EWAttention.png


BIN
maturText/media/Gimp/gitflow.xcf


BIN
maturText/media/RecyclerViewScreenshot.png


BIN
maturText/media/RepositoryDataInput.png


BIN
maturText/media/gitflow2.png


+ 250 - 107
maturText/revisioned.tex

@@ -88,6 +88,10 @@ includeheadfoot}
 
 \usepackage{comment}
 
+%for spacing
+\usepackage{setspace}
+\renewcommand{\baselinestretch}{1.5}
+
 % graphics package
 \usepackage{graphicx}
 
@@ -200,7 +204,7 @@ sorting=ynt
 }
 
 \newglossaryentry{branch}{
-    name=Git Branch,
+    name=branch,
     plural=branches,
     description={Beim \Gls{vcs} \Gls{git} handelt es sich hier um Eine abgetrennte Arbeitsachse, welche erlaubt verschieden Aufgaben in der Softwareentwicklung wie z.B. das Programmieren neuer Features getrennt oder parallel voneinander zu entwickeln um sie später wieder zusammenzuführen in einem \Gls{merge}. Weiterführend: \cite{branch}.}
 }
@@ -249,7 +253,7 @@ sorting=ynt
 
 %TODO: Quelle simon, Noah: @who?
 \newglossaryentry{sqlite}{
-    name=SQLight,
+    name=SQLite,
     description={SQLite unterstütz viele Funktionen von SQL hat aber keinen eigene Serverprozesse und ist deshalb leichter an Systemressourcen.}
 }
 
@@ -299,8 +303,61 @@ sorting=ynt
     description={Oberbegriff für die ganze graphische Oberfläche, bestehend aus Inhalten wie Buttons, Text, Bildern mit welcher der Nutzer interagieren kann durch tippen, scrollen oder Tastatureingaben in Textfeldern.}
 }
 
+\newglossaryentry{email client}{
+    name=Email Client,
+    description={Ein Programm, welches Emails verwaltet, sendet und emphängt.}
+}
+
+\newglossaryentry{fragment}{
+    name=Fragment,
+    description={Eine Klasse, welche ein Teil des UI ist und sein eigenes Layout, sein eigener Lebenszyklus und seinen eigenen Input hatt. \cite{fragment}}
+}
+
+\newglossaryentry{observer}{
+    name=Observer,
+    description={Informiert die Klasse über ein änderung bei eine beobachtbaren Objekt. \cite{observer}}
+}
+
+\newglossaryentry{livedata}{
+    name=LiveData,
+    description={Eine Klasse, welche beobachtbar in einem gewissen Lebenszyklus ist und Daten speichern kann. \cite{livedata}}
+}
+
+\newglossaryentry{email writer}{
+    name=Email Writer,
+    description={Der Teil der App in welchem Emails entworfen werden könne.}
+}
+
+\newglossaryentry{intent}{
+    name=Intent,
+    description={Ein Intent kann genutz werden um Daten von Activity zu Activity zu schicken. \cite{intent}}
+}
+
 \usepackage{csquotes}
 
+%==================Commands===============================
+
+%Signatur
+\newcommand{\doublesignature}[3][Simon Hammer]{%
+  \parbox{\textwidth}{
+    \vspace{2cm}
+    \centering Datum: #3 \\
+    Ort: Basel-Stadt \\
+
+    \parbox{7cm}{
+      \centering
+      \rule{6cm}{1pt}\\
+       #1 
+    }
+    \hfill
+    \parbox{7cm}{
+      \centering
+      \rule{6cm}{1pt}\\
+      #2
+    }
+  }
+}
+
 %==================begin document==========================
 
 \begin{document}
@@ -322,7 +379,7 @@ sorting=ynt
    
     \begin{figure}[H]
         \centering
-        \includegraphics[width=1\textwidth]{../logo/version3d.png}
+        \includegraphics[width=.8\textwidth]{../logo/version3d.png}
     \end{figure}
    
     \vspace{0.5cm}
@@ -338,24 +395,43 @@ sorting=ynt
 \pagebreak
 
 \section{Vorwort}
+Die Informatik ist heutzutage all gegenwärtig. Sie umfasst schon einen sehr grossen Teil unseres Alltags und der Anteil wächst immer weiter. Da ist es Sinnvoll sich 
+eine Zeit mit der Informatik beschäftigt zu haben. Und zur Informatik gehört natürlich auch das Programmieren. Die Fähigkeit zu Programmieren wird uns sicher in der
+Zukunft behilflich sein. Auch wenn es nur darum geht einfache Prozesse im eigenen Alltag zu automatisieren, wird es hilfreich sein. 
+
 Noah hatte schon länger grosses Interesse am Programmieren. Ich hingegen begann Interesse an den Programmiersprachen zu entwickeln als wir im Unterricht 
 Python lernten. Als die Zeit kam sich für ein Maturthema zu entscheiden, war für mich klar, ich würde eine App programmieren. Anfangs ging es mir darum eine 
 nützliche App zu kreieren, welche ich selbst verbessern kann und meine Bedürfnisse perfekt abdeckt.
 Zu diesem Zeitpunkt störte es mich, dass es keine effiziente Edubs-Mail-App fürs Smartphone gab und ich wollte Sie selbst kreieren. 
 Da ich aber wusste, dass ich mich nicht so gut auskenne, fragte ich bei Noah nach, wie er die Idee findet und ob er vielleicht mit mir diese Arbeit 
-angehen würde. Er war der Meinung, dass wir eine solche App auch für alle Emailanbieter erstellen können. Wir haben uns dann Konkreter über die App unterhalten und entschieden, diese auch zu Zweit 
-zu Programmieren. Wir waren uns einig eine App zu erstellen, welche keine Schwierigkeiten machte, wenn sie auf älteren Geräten lief - schliesslich hatte Noah 
-z.B. auch nur ein sehr altes Android Gerät - und sie sollte Open Source sein. Dafür sprechen viele praktische und philosphisch-ethische Gründe, aber dazu später mehr.
-Bei den Funktionen waren wir uns auch einig und wir hatten eine Menge an Ideen um einen vollumfänglichen Emailclient zu erstellen. Gedanke zu dem Design machten wir uns zuerst nicht,
+angehen würde.
+Da Noah schon länger keinen \gls{email client} auf seinem Smartphone installiert hatte, weil ihm keine der gerade verfügbaren Apps gefiel und er den Gedanke 
+schon länger hatte, sich seinen eigene Email Client zu programmieren, traf sich das sehr gut und wir konnten uns einigen. 
+Wir haben uns zusammen getan um einen Email Client zu programmieren, der auch auf älteren Geräten ohne Schwierigkeiten läuft. Schliesslich hatten wir beide
+eher ältere Smartphones, ebenfalls sollte die App Open Source sein. 
+Dafür sprechen viele praktische und philosophisch-ethische Gründe, aber dazu später mehr.
+Bei den Funktionen waren wir uns auch einig und wir hatten eine Menge an Ideen, um einen vollumfänglichen Email Client zu erstellen. Der Name \textit{snail mail} ist in einem 
+Brainstorming aus der wörtlichen Übersetzung von \textit{Schnecken Post} entstanden. Gedanke zu dem Design machten wir uns zuerst nicht,
 da wir es schlicht und funktional halten wollten. 
-Wir hatten beide eine gewisse Vorstellung unserer App vor uns und ob wir diese erreicht haben wird sich im laufe dieser Arbeit herausstellen. 
+Wir hatten beide eine gewisse Vorstellung unserer App vor uns und ob wir diese erreicht haben wird sich im laufe dieser Arbeit herausstellen. \\
+
+{\setstretch{1.0}
+\textit{Hiermit erklären wir, die vorliegende Maturaarbeit selbst verfasst (sowie das in der Arbeit
+beschriebene Produkt selbst gestaltet bzw. das beschriebene Projekt selbst durchgeführt) zu
+haben. Stellen, die wörtlich oder sinngemäss anderen Veröffentlichungen oder anderen Quellen,
+insbesondere dem Internet, entnommen sind, sind als solche eindeutig und wiederauffindbar
+erkenntlich gemacht. Alle diese Quellen sind vollständig und abschliessend im
+Literaturverzeichnis aufgeführt. Die vorliegende Arbeit ist in gleicher oder ähnlicher Form noch
+nicht veröffentlicht. } \\
+
+\doublesignature{Noah Vogt}{18.10.21}
+
+}
+
+\newpage
 
 \section{Einleitung}
-Das Kommunikationsmittel Email ist auch nach seinem fünfzigjährigen Geburtstag noch rege im Alltagsgebrauch vieler Leute auf dieser Welt.
-Nach dem Prinzip des technologischen Fortschrittes könnte angenommen werden, dass sich auch in den letzten zehn Jahren - nämlich seit dem Aufkommen der massentauglichen Smartphones - 
-die Emailsoftware verbessert hat. Doch auf dem Smartphone war es für uns, die Ersteller dieser Maturarbeit, schwer einen guten Email Client zu finden. So schlimm sogar, dass wir teilweise gar keinen Mailclient auf dem Handy installiert hatten, und stattdessen nur auf dem PC einen installiert hatten. Doch was macht man als Programmierer wenn einem die bereits erhältlichen Softwarelösungen nicht gefallen? Richtig, man schreibt seine eigene. Diese Maturarbeit ist also unser Teil, daran etwas zu ändern.
 
-%TODO: motivation imm sinne kritik an den anderen Apps und wie mir uf die ziel ko sind
 \subsection{Arbeitskonzept}
 
 \subsubsection{Quellcode Modell}
@@ -391,11 +467,11 @@ Ein Teil der kompilierten, ausführbaren Version des Programmes \textit{./hellow
 0000000000000001101001001000001100001010111110111100001110101011001100101111101101110011010
 \end{lstlisting}
 
-Wie man sieht, geht bei diesem Prozess des Kompilierens die Lesbarkeit für den Menschen grösstenteils verloren. Um ein Programm ausführen können braucht der Nutzer also keinen Zugang zum Quellcode. Doch wenn er wissen will, was das Programm macht - es könnte ihn ausspionieren oder andere bösartige Sachen im Hintergrund machen - oder einfach das Programm verändern will, braucht er unbedingt Zugang zum Source Code.\\
+Wie zu sehen ist, geht bei diesem Prozess des Kompilierens die Lesbarkeit für den Menschen grösstenteils verloren. Um ein Programm ausführen können braucht der Nutzer also keinen Zugang zum Quellcode. Doch wenn er wissen will, was das Programm macht - es könnte ihn ausspionieren oder andere bösartige Dinge im Hintergrund machen - oder einfach das Programm verändern will, braucht er unbedingt Zugang zum Source Code.\\
 
 \subsubsection{Lizensierung}
 % ENG: The differences of different source code models and their licenses have been already discussed in this paper (?). The reason the GNU General Public License Version 3 (short: GPL v3) was chosen because it is one of the most popular and strongest copyleft licenses that suits the application.
-Grundsätzlich gibt es die  Unterscheidung zwischen freien Softwarelizenzen proprietären Softwarelizenzen. Doch auch bei Open Source Software gibt es verschiedene Lizenzmodelle welche gewählt werden können. Diese lassen sich ziemlich gut in zwei Kategorien unterteilen: in \gls{permissive} und in \gls{copyleft}.\\
+Grundsätzlich gibt es die  Unterscheidung zwischen freien Softwarelizenzen und proprietären Softwarelizenzen. Doch auch bei Open Source Software gibt es verschiedene Lizenzmodelle welche gewählt werden können. Diese lassen sich ziemlich gut in zwei Kategorien unterteilen: in \gls{permissive} und in \gls{copyleft}.\\
 
 Die Autoren dieser App halten Copyleft Software in ethischer und praktischer Hinsicht für die beste Wahl bei der Softwarelizensierung, wehalb entschieden wurde für dieses Softwareprojekt die \textit{GNU General Public License (GPL) Version 3} \cite{GPLv3} der \gls{fsf} zu verwenden, da diese eine der bekanntesten, strengsten und somit effektivsten Copyleft-Lizenzen ist.
 
@@ -406,12 +482,14 @@ Die Autoren dieser App halten Copyleft Software in ethischer und praktischer Hin
 
 % ENG: (Nowadays) a lot of Open Source Developers pride themselves in writing software with much features that cater to the non-technical enduser. This results in having a large codebase, which gets bigger and bigger with every release. This makes it harder to maintaining the ever growing codebase, more and more bugs occurs, security and (most importantly) performance struggles under these conditions. This degrades the quality of software technology as it is the mainstream narrative to ``save time and money''.\\
 
-Eine grosse Anzahl Open-Source-Entwickler stolz darauf, Software mit scheinbar möglichst vielen Features zu schreiben. Dies führt zu einer großen Codebasis, die mit jedem Release größer und größer wird. Dadurch wird es schwieriger, die ständig wachsende Codebasis zu unterhalten, es treten immer mehr Fehler auf, die Sicherheit und - vor allem - die Leistung leidet unter diesen Bedingungen. Dies führt zu einer Verschlechterung der Code-Qualität der Software, da es die gängige Praxis ist, ``Zeit und Geld zu sparen''. \cite{bhattacharya2020}\\
+Eine grosse Anzahl Open-Source-Entwickler sind stolz darauf, Software mit scheinbar möglichst vielen Features zu schreiben. Dies führt zu einer grossen Codebasis, die mit jedem Release grösser und grösser wird. Dadurch wird es schwieriger, die ständig wachsende Codebasis zu unterhalten, es treten immer mehr Fehler auf, die Sicherheit und - vor allem - die Leistung leidet unter diesen Bedingungen. Dies führt zu einer Verschlechterung der Code-Qualität der Software, da es die gängige Praxis ist, ``Zeit und Geld zu sparen''. \cite{bhattacharya2020}\
 
 
 % ENG: This is where the \textit{suckless philosophy} comes in place: It aims at making software with simplicity in mind: Less source lines of code to not render the project unmaintainable in similar way as mentioned above. This way of programming is a lot more difficult, but the struggle is most of the time worth it. This coding philosophy also incentives (quality) code rewrites - which happens a lot less with bloated software counterparts - that gives the user more alternatives to choose from.
 
-Hier kommt die Philosophie des \textit{Suckless Philosphy} ins Spiel: Sie zielt darauf ab, Software mit Hinblick auf Einfachheit zu entwickeln: Weniger Quellcodezeilen, um das Projekt nicht in ähnlicher Weise unmaintainable zu machen, wie oben erwähnt. Diese Art zu programmieren ist viel schwieriger, aber der Aufwand ist es meistens wert. Diese Programmierphilosophie bietet auch Anreize für das qualitativ hochwertige Neuschreiben von Programmen - was bei der sogenannten \textit{Bloated Software \cite{bhattacharya2020}} viel seltener vorkommt - und gibt dem Benutzer mehr Alternativen zur Auswahl.
+Hier kommt die Philosophie des \textit{Suckless Philosphy} ins Spiel: Sie zielt darauf ab, Software mit Hinblick auf Einfachheit zu entwickeln: Weniger Quellcodezeilen, um das Projekt nicht in ähnlicher Weise unüberschaubar zu machen, wie oben erwähnt. Diese Art zu programmieren ist viel schwieriger, aber der Aufwand ist es meistens wert. Diese Programmierphilosophie bietet auch Anreize für das qualitativ hochwertige Neuschreiben von Programmen, was bei der sogenannten \textit{Bloated Software \cite{bhattacharya2020}} viel seltener vorkommt, dazu gibt es dem Benutzer mehr Alternativen zur Auswahl.
+
+\newpage
 
 \paragraph{Hintergründe, Technologisch, UNIX, KISS}
 Die \textit{Suckless Philosophie} ist aber längst nicht die erste Philosophie im Softwarebereich welche auf Simplizität beruht; so beispielsweise eine beliebte Definition der altbekannten \textit{UNIX Philosphy}:
@@ -545,17 +623,20 @@ Dies ist ein Programm zur Konvertierung von einem Dokumentformat in ein anderes.
 
 Wir wissen, was ein Email Client können muss, und haben nicht vor eine App zu designen, welche vollkommen überladen ist, mit Funktionen die keiner braucht.\\
 
-Die App soll die Basisfunktionen eines klassischen Email-Clients erfüllen. Dazu gehören das Lesen, Schreiben, Empfangen und Versenden von Emails, 
+Die App soll die Basisfunktionen eines klassischen Email Clients erfüllen. Dazu gehören das Lesen, Schreiben, Empfangen und Versenden von Emails, 
 das Öffnen und Anfügen von Anlagen, die Setzung einer Email-Signatur und das Erstellen und Speichern von Entwürfen. 
-Ebenso soll es verschiedene Ordner unterstützen, wie z.B. ein Spam/Junk oder ein Archiv Ordner. 
+Ebenso soll er verschiedene Ordner unterstützen, wie z.B. einen Spam/Junk oder einen Archiv Ordner. 
 Dazu soll es möglich sein E-Mails visuell sortieren zu können, beispielsweise indem die Ordner im Client nach Datum des Empfangs oder dem Absender sortiert werden können. E-Mails sollen markiert, gelöscht und weitergeleitet werden können und es soll eine Suchfunktion für jeden Mailordner geben. \\
 
 Ebenso soll es einen Account Manager geben, was voraus setzt, dass es möglich ist sich mit verschiedenen 
 Accounts anzumelden und diese bei bedarf zu wechseln. Beim Anmelden einer E-Mail, soll es dem Nutzer leicht gemacht werden, mit eingebauten Konfigurationen für beliebte 
-Emailprovider in der Schweiz. Darunter diese Anbieter: stud.edubs.ch, gmail.com, gmx.ch, outlook.com, yahoo.com, icloud.com, hotmail.com, web.de. \\
+Emailprovider in der Schweiz. Darunter diese Anbieter: stud.edubs.ch, gmail.com, gmx.ch, outlook.com, yahoo.com, icloud.com, hotmail.com, web.de. 
+
+\newpage
 
 Ein Element, welches fast jede App Heutzutage hat, sind Pushnachrichten, welche auch eingebaut werden sollen. Dabei sollen neue Nachrichten mit dem Absender und dem Beginn der E-Mail angezeigt werden. 
-Dies soll ein weiteres Feature der App sein. Wie es für leichte Email-Clients oft üblich ist, werden Bilder erst angezeigt, sobald es der Nutzer ausdrücklich möchte. Dieses Verhalten soll in den App-Einstellungen steuerbar gemacht werden. Eine sehr praktische Funktion soll sein, dass E-Mail-Adressen gespeichert werden und beim schreiben einer neuen E-Mail direkt verfügbar sind und ausgewählt werden können. Ob diese Funktion sinnvoll ist, ist fraglich, da auf viele Leute keine Emailaddressen auf der Kontaktapp ihres Handys speichern.\\
+Dies soll ein weiteres Feature der App sein. Wie es für leichte Email-Clients oft üblich ist, werden Bilder erst angezeigt, sobald es der Nutzer ausdrücklich möchte. Dieses Verhalten soll in den App-Einstellungen steuerbar gemacht werden. Eine sehr praktische Funktion soll sein, dass E-Mail-Adressen gespeichert werden und beim schreiben einer neuen E-Mail direkt verfügbar sind und ausgewählt werden können. %Ob diese Funktion sinnvoll ist, ist fraglich, da viele Leute keine Emailaddressen auf der Kontaktapp ihres Handys speichern.
+\\
 
 Das letzte Feature soll sein, dass Links direkt in einem Browser geöffnet werden können. Die Einstellungen sollen zudem das Farblayout der App ändern können, die Synchronisationsintervalle ändern können, Einstellungen an den Pushnachrichten ändern können, Kontaktlisten verwalten und Einstellungen zu Privatsphäre beinhalten.
 
@@ -563,11 +644,10 @@ Das letzte Feature soll sein, dass Links direkt in einem Browser geöffnet werde
 Im Unterschied zur Konkurrenz soll diese App so programmiert werden, dass sie alle nötigen Grundfunktionen für einen Email Client auf dem Smartphone beinhaltet, aber schneller starten soll als die Apps der Konkurrenz, weniger Speicherplatz und Resourcen verbrauchen soll und nicht mit unnötigen Funktionen überladen sein. \\
 
 
-Ein Pluginmanager soll auch eingebaut werden, um weitere Funktionen, welche das Programm verlangsamen würden oder nicht für jedermann geeignet sind, hinzuzufügen können. Es existiert natürlich auch die Möglichkeit nach Abschluss dieser Arbeit die App zu verbessern und auf uns an Nutzerwünsche anzupassen, doch hier wurden jetzt die ungefähren, geplanten Grundfunktionen genannt, um die Ziele der Funkionalität besser zu beleuchten.\\
+Ein Pluginmanager soll auch eingebaut werden, um weitere Funktionen, welche das Programm verlangsamen würden oder nicht für jedermann geeignet sind, hinzuzufügen können. Es existiert natürlich auch die Möglichkeit nach Abschluss dieser Arbeit die App zu verbessern und auf Nutzerwünsche anzupassen, doch hier wurden jetzt die ungefähren, geplanten Grundfunktionen genannt, um die Ziele der Funkionalität besser zu beleuchten.\\
 Wir haben uns viele Ziele gesetzt und dachten, dass wir auch mehr schaffen können. Weshalb dies nicht der Fall ist wird noch genauer betrachtet. 
 
-
-
+\newpage
 
 \section{Arbeitsprozess}
 
@@ -575,19 +655,25 @@ Wir haben uns viele Ziele gesetzt und dachten, dass wir auch mehr schaffen könn
 
 Um ein Programm, mir grösserem Umfang, zu Entwickel, braucht es Hilfsmittel die sich auf genau das spezialisiert haben. 
 Eines dieser Hilfsmittel sind \gls{vcs}. Diese sind eine sehr praktische Methode um Funktionen in ein Programm einzubauen, ohne das Risiko 
-das Programm komplett zu Überarbeiten, wenn diese Funktion einen Fehler hervorruft. In diesem Fall wurde \Gls{git} als \Glspl{vcs} genutzt, um für jegliche Funktionen
+das Programm komplett zu Überarbeiten, wenn diese Funktion einen Fehler hervorruft. In diesem Fall wurde \Gls{git} als VCS genutzt, um für jegliche Funktionen
 einen eigenen \gls{branch} zu erstellen und diesen wieder mit dem Hauptbranch zu \glspl{merge}, wenn die Funktion fertig ist.\cite{git} \cite{github} \\
 
+\begin{figure}[H]
+    \centering
+    \includegraphics[width=.8\textwidth]{media/gitflow2.png}
+    \caption{parallele Featureentwicklung mit Git \cite{gitflowBlog}}
+\end{figure}
+
 Um zu Zweit an einem Projekt gleichzeitig zu arbeiten, gibt es viel Möglichkeiten sich das aktualisierte Projekt zur Verfügung zu stellen. Die einfachste ist sich das 
 Projekt immer wieder zu Mailen, wobei schon nur bei Textarbeiten dabei Probleme auftauchen können, weshalb bei diesem Projekt \Gls{github} 
-verwendet wurde. Über \gls{github} konnten die einzelnen Versionen des Programms, welche durch den Gebrauch von \gls{git} entstanden sind, geteilt werden. 
-Auf \gls{github} ist das Programm öffentlich und wird dadurch auch open-source. Es kann aber nicht durch eine dritte Person, ohne Einwilligung von Noah, in den Source-Code
-des Programms geschrieben werden. Falls dies aber der Fall gewesen wäre, würde die dritte Person als mitwirkende Person auf \gls{github} aufgelistet werden. \cite{github} \\
+verwendet wurde. Über GitHub konnten die einzelnen Versionen des Programms, welche durch den Gebrauch von \gls{git} entstanden sind, geteilt werden. 
+Auf GitHub ist das Programm öffentlich und wird dadurch auch Open-Source. Es kann aber nicht durch eine dritte Person, ohne Einwilligung von Noah, in den Source-Code
+des Programms geschrieben werden. Falls dies aber der Fall gewesen wäre, würde die dritte Person als mitwirkende Person auf GitHub aufgelistet werden. \cite{github} \\
 
-Beim Programmieren einer grösseren Arbeit erweist es sich besonders nützlich ein \glspl{ide} zu verwenden. Es ist zu \gls{android-studio} gegriffen worden, weil sich dieses \gls{ide}
-speziell auf die android Entwicklung spezialisiert hat. \gls{android-studio} besitzt viele Hilfsmittel, welche das Programmieren einer Androidapp erleichtert. Zum beispiel ist der
+Beim Programmieren einer Arbeit dieser Grösse, erweist es sich besonders nützlich ein \glspl{ide} zu verwenden. Es ist zu \gls{android-studio} gegriffen worden, weil sich dieses 
+IDE speziell auf die android Entwicklung spezialisiert hat. \gls{android-studio} besitzt viele Hilfsmittel, welche das Programmieren einer Androidapp erleichtert. Zum beispiel ist der
 "Visual Layout Editor"\ eine grosse Hilfe beim Designen. \gls{android-studio} bringt auch einen \gls{compiler} und einen \gls{emulator} mit sich, womit eine \textit{debug} \gls{apk} und eine
-\textit{release} \gls{apk} version der App erstellt werden kann. Um die App zu testen, wurde öfters ein \textit{debug} \gls{apk} File erstellt und auf dem \gls{emulator} aus \gls{android-studio}
+\textit{release} \gls{apk} version der App erstellt werden kann. Um die App zu testen, wurde öfters ein \textit{debug} APK File erstellt und auf einem \gls{emulator} aus \gls{android-studio}
 getestet. Mit \gls{android-studio} können auch Apps mit speziellen Keys unterzeichnet werden, damit sie im GooglePlayStore veröffentlicht werden können.
 Die App sollte aber nicht nur auf Emulatoren laufen, um auch das Gefühl des Designs besser zu empfinden oder den Gebrauch im Alltag zu testen, wurde eine \gls{adb} genutzt.
 Mit \gls{android-studio} können auch Daten über die Effizienz der App aufgenommen werden. 
@@ -668,20 +754,35 @@ Es ist grösstenteils der suckless-basierten Codingphilosophie zu verdanken, abe
 % \textbf{ https://www.youtube.com/watch?v=2sjqTHE0zok} nur um später zu makieren.
 
 \subsubsection{Hauptziele}
-Gemäss den Zielen soll die App eine Verbindung mit einem Server erstellen können und mit ihm Interagieren können. Heisst sie soll die Informationen über einen Account, die der 
-Nutzer eingibt überprüfen können und weiter die Emails die ein Nutzer auf einem \gls{server} hat herunterladen. Ebenso soll die App Nachrichten weiter über einen Server verschicken können. 
+Gemäss den Zielen soll die App eine Verbindung mit einem Server erstellen können und mit ihm Interagieren können. Heisst sie soll die Informationen, über einen Account, die der 
+Nutzer eingibt, überprüfen können und weiter die Emails die ein Nutzer auf einem \gls{server} hat herunterladen. Ebenso soll die App Nachrichten weiter über einen Server verschicken können. 
 Um das zu realisieren, haben sich die Autoren nach passenden \glspl{library} für Java umgeschaut. Das Resultat dieser Suche waren zwei Libraries. 
+
+
 %TODO: noah schrib wurum mir die libraries ned gange sind und wurum mir uf python umgstiege sind. 
 
 Weil nach dem herunterladen der Nachrichten vom Server viele Daten gespeichert werden müssen, muss eine Möglichkeit her, wie diese Daten möglichst schnell, 
 und der Einfachheit halber mit einer gewissen Abstraktion, in einer sinnvollen Datenstruktur gespeichert werden können. Dazu taugte eine \gls{database}. Um dies zu erreichen 
-liest sich einer der Autoren in ein Buch ein. Dieses Buch soll ihm Aufschluss über das erstellen einer Database geben. 
+lass sich einer der Autoren in ein Buch ein. Dieses Buch soll ihm Aufschluss über das erstellen einer Database geben. 
+
 Es wurde klar, dass eine Database für Android meist mit \gls{sql} oder \gls{sqlite} geschrieben wird. Jedoch sind diese Sprachen nicht wirklich handlich und es
 liess sich auch nicht mit dem Zeitplan verknüpfen eine weitere Programmiersprache zu lernen. Weshalb zu Room gegriffen wurde. Room ist eine abstrakte Klasse über SQLite 
 und kann mit dieser Kommunizieren. Mit ihr können SQL \glspl{query} fast vollständig in Java geschrieben und ausgeführt werden. Ebenso ist Room für die Fehlersucher besser geeignet, 
 weil es beim Compilen der App die SQL queries und \glspl{entity} überprüft. \cite{roomInfo} \\
 
-Um die heruntergeladenen und gespeicherten Nachrichten auch Anzeigen zu könne wird ein Interface benötigt. Dieses sollte so schlicht und ordentlich wie möglich gehalten werden. 
+\begingroup
+\setlength{\intextsep}{7pt}
+\setlength{\columnsep}{15pt}
+
+\begin{wrapfigure}{r}{6cm}
+\centering
+    \includegraphics[scale=.12]{media/RecyclerViewScreenshot.png}
+\caption{Beispiel vom RecyclerView}
+\end{wrapfigure}
+
+\nohyphenation
+
+Damit die heruntergeladenen und gespeicherten Nachrichten auch Angezeigt werden können benötigt es ein Interface. Dieses sollte so schlicht und ordentlich wie möglich gehalten werden. 
 Die \gls{recyclerview} Library ist eine optimale Möglichkeit Daten in Form von Nachrichten als eine Auflistung zu zeigen. Sie bringt einen Vorteil gegenüber einer \gls{list} mit und zwar
 verwendet sie \glspl{view}, die Angezeigt wurden, wieder. Was dem Recyclerviewer einen Vorteil im Punkt Effizienz gegenüber der Liste bringt. \cite{recyclerViewRecycle}
 
@@ -689,6 +790,7 @@ Neben der Recyclerview Library werden auch andere libraries gebraucht um das \gl
 Den Autoren hat sie schlicht gefallen und sie ist nicht schwer zu benutzen, weshalb diese Library genutzt wurde. Sie ist nach ganz klaren Prinzipien aufgebaut 
 und von Google erstellt worden um hochwertige Designs zu kreieren. \cite{materialDesigne}
 
+\endgroup
 
 \subsubsection{Aufbau}
 
@@ -715,7 +817,6 @@ vom \textit{User Interface} im Ordner \textit{Draft} angezeigt werden. Und die \
 
 \endgroup
 
-\newpage
 \subsubsection{Interface}
 
 
@@ -743,8 +844,8 @@ Ein Recyclerviewer ist in fünf grundlegende Teile aufgeteilt.
 
 %TODO: dütsch? +Bild
     \item Das recyclerview Objekt, welches ein Container ist und in das User Interface eingebaut wird. 
-Es beinhaltet verschiedene Views, welche nochmals unterteilt werden können. In einer View wird in unserem 
-Fall eine Nachricht eingebaut mir dem Absender, der Absende Zeit und einem Betreff. 
+Es beinhaltet verschiedene Views, welche nochmals unterteilt werden können. In einer View wird in diesem 
+Fall eine Nachricht eingebaut mir dem Absender, der Absende Zeit, einem Betreff und dem Endsender der Nachricht. 
 
 \end{enumerate}
 
@@ -756,9 +857,9 @@ Fall eine Nachricht eingebaut mir dem Absender, der Absende Zeit und einem Betre
     \item Der Layout manager. Er ist für die form einer einzelnen View verantwortlich. 
 Der Layout manager kann auch wieder in drei Arten unterteilt werden. Der Linearlayout Manager sorgt für eine 
 Horizontale oder vertikale unterteilung einer View. Hingegen führt der Gridlayout Manager zu einer horizontalen 
-und vertikalen Unterteilung des View. Für den Email-Client bietet er die  
+und vertikalen Unterteilung der View. Für den Email-Client bietet er die  
 beste oberfläche um Nachrichten darzustellen. Es gibt nämlich noch den den Staggeredgridlayout Manager, welcher 
-für eine versetzen unterteilung der View kann sorgen. Dies ist aber für eine Email-Client unbrauchbar. 
+für eine versetze unterteilung der View sorgen kann. Dies ist aber für einen Email Client unbrauchbar. 
 
 \begin{figure}[H]
     \centering
@@ -766,26 +867,29 @@ für eine versetzen unterteilung der View kann sorgen. Dies ist aber für eine E
     \caption{Layout Manager Recyclerview \cite{LayoutManagerPicture}}
 \end{figure}
 
-    \item Der View Holder bietet die Möglichkeit jedes einzelne Raster der View mit einem Item auszustatten mit wiederum einer View in einem Recyclerviewer
+    \item Der View Holder beschreibt die Position einer View oder Metadaten innerhalb des Recyclerviewers.
 
     \item Der Adaper ist wohl eines der wichtigsten Teile des Recyclerviewer. Er sorgt für das erstellen des ViewHolder-Objekt und
 bindet auch die Daten aus der Database an den View Holder
 
-    \item Die Database ist das Herzstück dieser App und wir auch für den Recyclerviewer verwendet um die 
-Views mit den richtig Informationen zu füllen. 
+    \item Die Database ist das Herzstück dieser App und wird auch für den Recyclerviewer verwendet um die 
+Views mit den richtigen Informationen zu füllen. 
 
 \end{enumerate}
 
 Die Wahl des Layout Manager wurde sehr schnell getroffen. Es war klar, dass eine Nachricht nicht nur eine Information auf horizontaler Ebene anzeigen muss sondern
-z.b auch das Datum nicht versetzt angezeigt werden soll. Weshalb der Gridlayout Manager gewählt wurde. Nun hat sich Simon in einem Tutorial über den Recyclerviewer informiert
-und konnte sich auch ein beispiel anschauen, woran sich der Recyclerviewer der Email-App zu beginn sehr stark orientierte. \\
+z.b auch das Datum nicht versetzt angezeigt werden soll. Weshalb der Gridlayout Manager gewählt wurde. 
 
 % \textbf{https://github.com/android/views-widgets-samples/tree/main/RecyclerView} Recyclerviewer beispiel \\
 
-Nach dem sich Simon über den Recyclerviewer informiert hat, sollte er endlich in das Programm eingefügt werden. Leider gab es da einige Probleme. Der erste Versuch scheiterte daran,
-dass die App abstürzte ohne einen Error zu melden. Und nach einiger Zeit war die beste Lösung wieder an einen Punkt zu gehen, an welchem die noch funktionierte, nur ohne vollständigen 
+Mit Hilfe eines Open-Source Programm, welches eine Demonstration eines RecyclerViewers war, haben sich die Autoren über diesen Informiert. \cite{RecViewApp}
+Nach dem dieses Programm ausgetestet und beliebig modifiziert wurde, sollte es in die App eingebaut werden. 
+Der erste Versuch scheiterte daran,
+dass die App abstürzte ohne einen Error zu melden. Und nach einiger Zeit war die beste Lösung wieder an einen Punkt zu gehen, an welchem die App noch funktionierte, nur ohne vollständigen 
 Recyclerviewer. Es dauerte einen ganzen Monat bis eine weitere Version mit Recyclerviewer bereit war. Nur diesmal funktionierte die App. \\
 
+\textbf{Weiss ned ob de abschnitt so sinn macht @Simon}
+
 Der Recyclerviewer war an diesem Punkt sehr simpel. Er konnte eine vorbestimmte menge an Views anzeigen, welche in einem Loop generiert wurden, lass die Informationen aus
 einer sehr simplen Database aus und er konnte noch nicht aktualisiert werden. Die Informationen konnten nur einmal eingelesen werden und der View-Holder wurde in der gleichen Klasse wie 
 der Adapter definiert. \\
@@ -802,7 +906,7 @@ Der CustomAdapter war am Anfang der App dafür zuständig die Daten, welche in e
 \textit{Constructor} dem ViewHolder weiter zu geben, welcher dann diese Informationen an eine View im Recyclerviewer band. Im verlaufe der Zeit wurde 
 der Adapter angepasst und erweitert. Dies hatte Simon auch sehr grossen Spass gemacht da er auch wirklich alles verstand, jedoch als die Database entstand war der alte 
 CustomAdapter überflüssig und wurde ersetzt. Der neue CustomAdapter regelt seine Aufgaben jetzt ein wenig anderst. Zwar viel effizienter mit weniger Code aber nicht 
-so Transparent. Der CustomAdapter wird wie der Recyclerviewer in jedem Fragment für den zugehörigen \textit{Folder} neu Aufgerufen und überschreibt den CustomAdapter 
+so Transparent. Der CustomAdapter wird wie der Recyclerviewer in jedem \gls{fragment} für den zugehörigen \textit{Ordner} neu Aufgerufen und überschreibt den CustomAdapter 
 aus der Mainactivity. 
 
 \subsubsection{Popup Window}
@@ -822,13 +926,11 @@ Zusätzlich gibt es noch eine \textit{Input Validation}. Dort wird gecheckt, ob
 % Speichern kann, da ein Ziel war POP3 anzubieten. Und mit IMAP muss die geöffnete Nachricht auch einmalig gespeichert werden. Dafür bietet sich eine Dabase gut an.
 % \textbf{nicht sicher ob das Stimmt was ich hier schreibe}\\
 
-%TODO: überarbeiten weil in Hauptziel drin
-Da viele Daten gespeichert werden müssen, musste eine Möglichkeit her, wie diese möglichst schnell, und der Einfachheit halber mit einer gewissen Abstraktion, in einer sinnvollen Datenstruktur gespeichert werden können. Dazu taugte eine Datenbank für diesen Anwendungszweck und u.a. in Anbetracht der eingrenzenden Umständen, also die Deadline der Arbeitsabgabe, an. Noah hatte schon ein paar wenige Erfahrungen mit Datenbanken, doch da Simon diese Aufgabe übernehmen wollte, las er sich mithilfe eines Buches \cite{riccardi2001} erfolgreich in die Thematik ein.
-
+%TODO: zeigen wie Nachrichten eingelesen werden
 
 Ein \textit{relational database management system} ist ein Databasesystem in welchem die Informationen als \textit{tables} gespeichert werden. 
 Ein \textit{table} besteht aus Reihen und Spalten. Eine Reihe repräsentiert jeweils ein Object der Database und eine Spalte repräsentiert ein Wert eines Attributes. Im Fall dieser App
-gibt es 9 Attribute und einen Objectkey. \\
+gibt es 9 Attribute und einen Objectkey. \cite{riccardi2001} \\
 
 
 \begin{tabular}{ |p{1.6cm}  |p{1.1cm} |p{1.1cm} |p{1.05cm} |p{1.15cm} |p{1.15cm} |p{1.25cm} |p{1.75cm} |p{1.25cm} |p{1.15cm}|}
@@ -837,7 +939,7 @@ gibt es 9 Attribute und einen Objectkey. \\
  \hline
     ObejctKey &To & cc & bcc & from & date & subject & textContent & folder & seen  \\
  \hline
-     01    &Valentin& null & null & Lennard & 01.03.13 & Schule &  Hallo Herr Konrad ...& Draft & true \\
+     01    &Valentin& null & null & Lennard & 01.03.13 & Schule &  Hallo Herr & Draft & true \\
  \hline
 \end{tabular} \\
 
@@ -850,8 +952,9 @@ Email-Adressen, welche die Emails auch bekommen. Der einzige unterschied ist, da
 
 \textit{Date} gibt das Datum an, an welchem die Email verschickt wurde. \textit{Subject} ist ein Betreff für die Email und \textit{textContent} ist der Text welcher in der Email verfasst wurde. 
 
-Das Attribut \textit{Seen} ist etwas spezieller. Es gibt an ob eine Nachricht von dem Nutzer Gelesen wurde oder nicht. Diese Info wird dann im Recyclerviewer genutzt um die Textart zu verändern
-in welcher die Email angezeigt wird. Diese Attribut muss verändert werden, wenn eine Email geöffnet wird. \\
+Mit dem Attribut \textit{seen} war geplant, das es von false zu true wechseln zu lassen, wenn der Nutzer eine ungelesene Nachricht öffnet. Dazu sollte dann die Schriftart,
+in welcher die Nachricht im Recyclerviewer angezeigt wird, geändert werden. Leider hat diese Funktion es nicht in die App geschafft, aufgrund Zeitmangels und der eher 
+geringen Wichtigkeit dieser Funktion. Dennoch wird sie sicher nach der Abgabe dieser Arbeit noch eingebaut. \\
 
 Die Attribute \textit{To}, \textit{from}, \textit{date}, \textit{folder} und \textit{seen} wurden im Databaseconstructor als @NonNull definiert, heisst sie müssen eingelesen werden und können 
 nicht null sein. Das macht soweit Sinn, weil eine Email, bis auf \textit{seen}, nicht ohne diese Angaben versendet werden können und ohne zu wissen in welchem Ordner die Email einzuordnen ist,
@@ -889,10 +992,10 @@ mit SQLite um de Zugriff auf die Daten zu ermöglichen \cite{roomStructure}
 \paragraph{MessageDao}
 
 In der \textit{DAO}-Klasse können SQL statements verwendet werden. Um auf die Database zu zugreifen und nur Gewisse 
-Objekte zu erfassen, hat Simon ein paar wenige SQL statements gebraucht. SQL ist zum Glück in diesem Fall sehr selbsterklärend, 
+Objekte zu erfassen, braucht es SQL. Mit diesen Codezeilen kann dann nach den \textit{Ordnern} in der Spalte \textit{folder} gesucht werden.
+SQL ist in diesem Fall sehr selbsterklärend, 
 dennoch werden wir darauf eingehen.\\
 
-
 \lstset{language=SQL}
 \begin{lstlisting}
     /* get Draft messages*/
@@ -906,35 +1009,32 @@ welchem table, in diesem Fall vom message\_table. Mit WHERE können Spalten der
 gewählt um mit LIKE ein Attribut zu bestimmen. So wird nun ein Attribut namens 'Draft' gewählt. Mit ORDER By kann die Ausgabe noch sortiert werden. So wird die Ausgabe anhand der Spalte 'date'
 aufsteigen Sortiert. \cite{queryExpl}
 
+Dieses Query wird über das Repository und das Viewmodel, welche gleich erklärt werden, im Fragment Draft ausgeführt. Dieses Fragment wird aufgerufen, wenn de Nutzer 
+auf den Ordner Draft drückt. Also ist es so, wenn dieser Ordner aufgerufen wird, wird die Database nach dem Wert 'Draft' im Attribut \textit{folder} abgefragt.
+
 \subsubsection{Repository/ViewModel}
 
 \begingroup
 \setlength{\intextsep}{1pt}
 \setlength{\columnsep}{4pt}
 
-\begin{wrapfigure}{r}{5.5cm}
+\begin{wrapfigure}{r}{6.5cm}
     \centering
-    \includegraphics[width=.4\textwidth]{media/ViewModelRepository.png}
+    \includegraphics[width=.4\textwidth]{media/RepositoryDataInput.png}
     \caption{EmailViewModel and Repository
     \cite{appStructurePicture}}
 \end{wrapfigure}
 
-Mit der Database wurden auch ein Repository und ein Viewmodel mit Viewholder erstellt. 
-Das Repository verwaltet die Datenquellen. Im Normalfall würde es Daten von einem Server verwalten und in die Database einlesen. Ebenfalls kann
-es auch Daten die der User direkt eingibt einlesen. Zwar nicht direkt von der Activity aber über ein Viewmodel können Daten in die Database eingelesen werden. Das Repository 
-stellt dazu die Funktionen für das Viewmodel zur Verfügung. 
-Da in diesem Falle keine anständige Java Library gefunden wurde, welche nicht uralt oder eine Dokumentation zur Verfügung hatte mussten die Daten vom Server mit einer 
-Python Library eingelesen werden. Noah Programmierte dazu in Python mit einer Library ein Programm welches die Daten von eine Server herunterlädt und in die Database einliest. 
-
-In diesem Falle das EmailViewModel, stellt Funktionen zur Verfügung, mit welchen auf die Database, über das Repository, zugegriffen werden kann. Ebenfalls gibt es LiveData zurück 
-mit welcher die Mainactivity die observer Verknüpfungen erstellen kann. Mit dem ViewHolder in diesem Fall dem EmailViewHolder können Daten an View gebunden werde. In dem Fall wäre das 
-der Recyclerviewer.
-So wird die Mainactivity informiert, wenn eine Änderung der Database vorgekommen ist. Im Fall dieser App wird zwar 
-ein Recyclerviewer in der Mainactivity mit Observer und Adapter erstellt, jedoch wird dies nur gemacht um das gleiche für jedes Fragment zu machen, welche dann den Recyclerviewer und den 
-observer aus der Mainactivity überschreiben. Die einzelnen \textit{Folder} haben jeweils ein Fragment zugeordnet, in welchen der einzige unterschied ist, dass sie andere 
-Attribute aus der Database abfragen um die den \textit{Folder} entsprechenden \textit{Messages} zu bekommen. 
-
-An diesem Beispiel ist es vielleicht leichter zu verstehen. Dies ist die Funktion welche an einer Variable vom Typ EmailViewModel ausgeführt wird. In dem Fragment HomeFragment in der
+
+Damit die Database die Daten einlesen kann, braucht es eine Repository. Über das Repository werden normalerweise Daten aus aller Art von Datenquellen eingelesen. Jedoch
+werden in diesem Fall keine Daten vom Server direkt im Repository eingelesen, denn sie gehen zuerst über das Viewmodel.
+Weil das herunterladen der Daten vom Mailserver leider erst sehr spät funktioniert hatte, 
+haben sich die Autoren dazu entschlossen das einlesen der Daten über das Viewmodel zu mache. Dieses hat eine sehr ähnliche Funktion, 
+es leitet die Daten ebenfalls weiter, nur gibt es \gls{livedata} zurück, was dazu führt, dass in der Mainactivity oder im entsprechenden Fragment ein \gls{observer} 
+eingebaut werden kann. Dieser informiert die klasse dann über Veränderungen in der Databse, um sie dann im Recyclerviewer anzeigen zu lassen. 
+\cite{appStructurePicture}
+
+Dies ist die Funktion welche an einer Variable vom Typ EmailViewModel ausgeführt wird. In dem Fragment 'HomeFragment' in der
 onCreateView Funktion, welcher immer ausgeführt wird wenn dieses Fragment aufgerufen wird. 
 
 
@@ -947,9 +1047,16 @@ onCreateView Funktion, welcher immer ausgeführt wird wenn dieses Fragment aufge
         });
 \end{lstlisting}
 
-Die Funktion getInboxMessage() is im der Klasse EmailViewModel definiert und gibt LiveData<List<Message>> zurück, was soviel ist wie eine Liste der Objekte in der Database, eingebettet 
+\begingroup
+\nohyphenation
+
+Die Funktion getInboxMessage() ist in der Klasse EmailViewModel und EmailRepository definiert und gibt 
+
+LiveData \textless List \textless Message \textgreater \textgreater  zurück, was soviel ist wie eine Liste der Objekte in der Database, eingebettet 
 in LiveData.
 
+\endgroup
+
 \lstset{language=java}
 \begin{lstlisting}
 
@@ -972,7 +1079,6 @@ in LiveData.
 
 \end{lstlisting}
 
-
 \lstset{language=java}
 \begin{lstlisting}
 
@@ -991,29 +1097,41 @@ in LiveData.
 
 \end{lstlisting}
 
-Im \textit{Cunstroctor} von dem EmailViewModel wird der Variable mInboxMessage die Daten aus dem Repository übergeben welche diese wieder im \textit{Constructor} von dem MessageDAO überkommt.
-
+Es ist ein Schlange welche sich durch EmialViewModel und EmailRepository zieht. In de beiden \textit{Constructor} wird etwa das gleiche gemacht. Im EmailRepository
+werden die Query aus dem MessageDAO ausgeführt um die Daten in Variablen für jeden Ordner zu speichern. Und im EmailViewModel werden, durch Funktionen aus dem Repository 
+die Variablen abgerufen und wieder neu gespeichert um am Schluss diese Variablen in einem Fragment aufzurufen und dem Adapter gegeben. Wie es am Anfang dieser Seite beschrieben 
+ist.
 
 \subsubsection{Draft Messages}
 
 \begingroup
-\setlength{\intextsep}{1pt}
+\setlength{\intextsep}{5pt}
 \setlength{\columnsep}{4pt}
 
-
-\begin{wrapfigure}{r}{9cm}
+\begin{wrapfigure}{r}{6cm}
     \centering
-    \includegraphics[width=.55\textwidth, height=.55\textwidth]{media/AppStructure.png}
-    \caption{App Structure \cite{appStructurePicture}}
+        \includegraphics[width=.3\textwidth]{media/EWAttention.png}
+        \caption{Email Writer}
 \end{wrapfigure}
 
-Der ganze Aufbau der in den Kapitel von vorhin erklärt wurde, hatte nur zwei Ziele. Einmal das einlesen von Emails von einem Server und das Einlesen von Emails
-über ein Fragment genannt messageCreateFragment. Diese Fragment interagiert mit einer Activity genannt NewDraftMessageActivity. Die Mainactivity startet beim Klicken auf einen Button 
-das messageCreateFragment. Dieses liest die Daten ein welche der User in das Fragment schreibt und übergibt sie mit Hilfe der NewDraftMessageActivity direkt an die Message Klasse und somit in die 
-Database.  \\
 
-Dies ist der grobe Aufbau um Messages anzuzeigen. Wenn etwas durch die NewDraftActivity verändert wird, wird der Observer informiert, welcher den CostumAdpater informiert und bis nach 
-ganz unten die neuen Informationen ausliest.
+%\begin{wrapfigure}{r}{9cm}
+%    \centering
+%    \includegraphics[width=.55\textwidth, height=.55\textwidth]{media/AppStructure.png}
+%    \caption{App Structure \cite{appStructurePicture}}
+%\end{wrapfigure}
+
+\nohyphenation
+
+Vorhin wurde beschrieben, wie Daten aus der Database ausgelesen werden, wie sie eingelesen werden und wie sie gespeichert werden. Jetzt wird kurz 
+noch gezeigt, wann und wie Entwürfe unter dem name 'Drafts' gespeichert werden. \\
+
+Nachdem eine Nachricht geschrieben wurde, kann sie versendet werden oder auch gespeichert werden, wenn im \gls{email writer} das Kreuz gewählt wird, wird der Nutzer 
+gefragt, ob er die Nachricht abspeichern möchte. Wenn er die Nachricht speichern will, werden im MessageCreateFragment, welches dem Email Writer entspricht, die
+eingegebenen Informationen ausgelesen. Über einen \gls{intent} werden diese Informationen weiter an die MainActivity gesendet und dort 
+mit dem \textit{Folder} Attribut 'Draft' in die Database eingelesen.\\
+
+\endgroup
 
 %TODO: alles um de Server mit Python und repository etc. Dänkfähler mit Aktualisierung vo de Ordner
 \subsubsection{Server Connection}
@@ -1021,16 +1139,32 @@ ganz unten die neuen Informationen ausliest.
 \subsection{Umsetzung}
 \subsubsection{Bugs}
 % Erklärung woher, warum falsch, wie gelöst
-Programmierfehler schleichen sich in jedem Softwareprojekt ab einer gewissen Komplexitätsstufe ein. Damit hatten auch die Entwickler diese Projektes zu kämpfen. Hier dazu ein kleines Beispiel:
+Programmierfehler schleichen sich in jedem Softwareprojekt ab einer gewissen Komplexitätsstufe ein. Damit hatten auch die Entwickler dieses Projektes zu kämpfen. Hier dazu ein kleines Beispiel:
 
 % GUI stuff -> oneliner commit 
-Als der RecyclerViewer das erste Mal eingebunden werden konnte, ohne dass die App nach dem Öffnen direkt abstürzt, war aber das Problem, dass am oberen Teil Inhalte abgeschnitten waren. Das konnte gelöst werden, indem diese Codezeile in der Datei \textit{app/src/main/res/layout/activity\_main.xml} an der richtigen Stelle eingefügt wurde:
+Als der RecyclerViewer das erste Mal eingebunden werden konnte, ohne dass die App nach dem Öffnen direkt abstürzt, war das Problem, dass am oberen Teil des UI, Inhalte abgeschnitten waren. Das konnte gelöst werden, indem diese Codezeile in der Datei \textit{app/src/main/res/layout/activity\_main.xml} an der richtigen Stelle eingefügt wurde:
 
 \lstset{language=XML}
 \begin{lstlisting}
 android:paddingTop="50dp"
 \end{lstlisting}
 
+Es gab sehr viele Bugs, erst recht gegen Ende der Matur, weil dort erst die meisten Funktionen fertig wurden. 
+Ein Bug der bis Heute nicht gelöst werden konnte, ist das löschen des \textit{Tables} in der Database. Eigentlich sollte dies eine
+Leichtigkeit sein, dennoch war es den Autoren nicht möglich ein einfaches Room/SQL statement zu finden, welche alle Informationen in der Database löscht. \\
+
+Die Lösung zu diesem Problem hat leider auch einen Hacken. Es muss nämlich jeder Ordner einmal ausgewählt werden, bevor alle Nachrichten gelöscht werden können. 
+Die Lösung an sich war, dass wenn einer der Ordner geöffnet wird, alles Nachrichten in diesem Ordner in einer Liste gespeichert werden. Wenn dann die Option "Delete all Folder"
+gewählt wird, wird ein Loop gestartet, welcher durch die Liste geht und jede Nachricht einzeln ausgibt. Diese Nachricht wird dann über Umwege an die MessageDAO Klasse gebracht
+und dort kann eine einzelne Nachricht dann gelöscht werden. Es ist eine Umständliche Lösung und nichtmal ausgereift. Dennoch besser als wenn es nicht möglich wäre. \\
+
+Vor kurzer Zeit war dieser Bug noch störender, denn die Nachrichten mussten auch gelöscht werden, wenn ein neuer Account angemeldet wurde. Jedoch 
+konnten das umgangen werden, sobald der Account Manager aufkam. Mit diesem mussten die Nachrichten einfach auch nach dem Account abgerufen werden und die Nachrichten
+wurden nicht mehr gelöscht. Es wurden einfach nur die Richtigen angezeigt. \\
+
+Wir sind uns ziemlich sicher, dass es weiter Bugs in der App geben wird, da wir nicht genügend Zeit für das debugging eingeplant haben. 
+
+
 \subsubsection{Probleme / Hiccups}
 % RecyclerViewer, shit java IMAP libraries
 Probleme waren die unnötig vielen Layouts, welche entstanden bei unserer App. Vielleicht hätten diese minimiert werden können, wenn die Entwickler eine siginfikant höhere Erfahrung im Bereich der Android Entwicklung hätten, oder wenn die verschiedenen Inhalte beim Aufrufen weniger Layouts generieren würden, oder diese könnten besser wieder referenziert werden.\\
@@ -1048,49 +1182,56 @@ Sowohl im Programm-Quellcode der App als auch im Quellcode dieser Arbeit haben d
 Auch haben sich die beiden zeitweise Montags zusammen hingesetzt und den Arbeitsprozess in dieser Weise zu besprechen und um sich die nächsten Aufgaben zu verteilen.\\
 
 Insgesamt verlief die Kommunikation doch reichhaltig, obwohl einer der beiden Autoren doch etwas überdurchschnittlich schwer digital erreichbar ist. Die grobe Aufteilung des Programmes um daran zu entwickeln um dann die Komponenten wieder zusammenzufügen hatte etwas von dem typischen Modularität und des Touches der Linuxphilosophie.
-% TODO: bruche mir de satz mit de 'linuxphilosophie' @simon? weiss grad iwie nid
+% TODO: bruche mir de satz mit de 'linuxphilosophie' @simon? weiss grad iwie nid. Doch ich find dä super
 
 \subsection{Testing}
 
+Zum Testen gibt es soweit nicht sehr viel zu sagen, da die Autoren fortlaufen das Programm ausprobiert haben und die Resultate direkt wieder in das Programm flossen.
+Es hätte keinen wirklich mehrwert gehabt die 'Ergebnisse' solcher einfachen Test zu dokumentieren. Wofür die Zeit leider nicht richtig gereicht hat, war das 
+richtige testen der App im Alltag. Da die App noch nicht wirklich fertig ist und die neuste Version auch erst vor kurzem entstand, konnte die App nicht an bekannte geben werde
+und ein Paar Tage getestet werden. Das Interface wurde getestet aber darüber hinaus leider nicht viel.
+
 \section{Resultate}
 % TODO: Vergleich mit ursprünglichen Zielen und Gegenüberstellung den vorliegenden Programmen ähnlicher Art,
 % Beschreibung der vorliegenden getesteten  Funktionalitäten, Pros,Kontras, ...
 \subsection{Vergleich mit unseren ursprünglichen Zielen}
-Das User Interface ist erfreulich gut im Einklang mit den ursprünglichen Zielen, es ist wirklich simpel rausgekommen ohne irgendwelchen unnötigen Schnickschnack. Simpel is das GUI also, doch wie steht es mit der Bedienbarkeit? Dazu haben wir Freunde und Bekannte eingespannt, ihnen ein Handy mit der App in die Hand gedrückt und gesagt sie sollen einen Mailaccount einrichten um dies herauszufinden. Dabei haben sich die meisten gut und schenll zurechtgefunden, obwohl die App ja noch nicht fertig ist.\\
+Das User Interface ist erfreulich gut im Einklang mit den ursprünglichen Zielen, es ist wirklich simpel ohne irgendwelchen unnötigen Schnickschnack. Simpel ist das GUI also, doch wie steht es mit der Bedienbarkeit? Dazu haben wir Freunde und Bekannte eingespannt, ihnen ein Handy mit der App in die Hand gedrückt und gesagt sie sollen einen Mailaccount einrichten, um dies herauszufinden. Dabei haben sich die meisten gut und schnell zurechtgefunden, obwohl die App ja noch nicht fertig ist.\\
 
-Die App selber ist wie von uns in den Zielen vorgegeben Free Software. Doch erst es wurde herausgefunden, dass die von diesem Projekt verwendete \say{chaquopy} Bibliothek aber proprietär ist, und somit indirekt ein Konflikt mit den ursprünglichen Zielen: Es wurde zwar nicht expilizit angegeben, dass die alle Bibliotheken zwingend auch Open Source sein sollen, doch es ist nicht im Sinne eine nichtfreie Library zu haben. Im Laufe der weiteren Softwareentwicklung wird dieser Fehler noch unbedingt behoben werden müssen. Dieser Misstand ist auch teilweise dem Dependencymanagement von Gradle anzulasten, da dieser immer nur die binäre Version herunterlädt und der Source Code von Dependencies nirgends gescheit verlinkt ist.\\
+Die App selber ist wie von uns in den Zielen vorgegeben Free Software. Doch erst kürzlich kam auf, dass die von diesem Projekt verwendete \say{chaquopy} Bibliothek proprietär ist, und somit indirekt ein Konflikt mit den ursprünglichen Zielen steht: Es wurde zwar nicht expilizit angegeben, dass alle Bibliotheken zwingend auch Open Source sein sollen, doch es ist nicht im Sinne der Autoren eine nichtfreie Library zu verwenden. Im Laufe der weiteren Softwareentwicklung wird dieser Fehler noch unbedingt behoben werden müssen. Dieser Missstand ist auch teilweise dem Dependencymanagement von Gradle anzulasten, da dieser immer nur die binäre Version herunterlädt und der Source Code von Dependencies nirgends gescheit verlinkt ist.\\
 
-Die wichtigsten Funktionen der App wurden erreicht, man kann Emails schreiben, lesen, hat verschiedene Mailboxes getrennt ansehen und man kann seine Email Accounts gut managen, also hinzufügen, ändern und entfernen. Doch gewisse Features, nämlich Pushnachrichten, Suchfunktionen, HTML output parsing, ein visuelles Atribut, wo man sieht ob eine Nachricht gelesen wurde in der Mailbox fehlen noch ganz und Funktionen wie die Einstellungen, das synchronisieren der Datenbank mit dem Mailserver und die Anhangfunkionalität sind noch nicht fertiggestellt und es gibt auch noch gewisse Bugs bei der Entstehung von \say{edge cases} \cite{edgecase} bei bestimmten, einzelnen Emails.\\
+Die wichtigsten Funktionen der App wurden erreicht, es können Emails geschrieben, gelesen werden, es hat verschiedene Mailboxen und man kann seine Email Accounts gut managen, also hinzufügen, ändern und entfernen. Doch gewisse Features, nämlich Pushnachrichten, Suchfunktionen, HTML output parsing, ein visuelles Atribut, wo zu sehen ist, ob eine Nachricht gelesen wurde, fehlen noch ganz und Funktionen wie die Einstellungen, das synchronisieren der Datenbank mit dem Mailserver und die Anhangfunkionalität sind noch nicht fertiggestellt. Es gibt auch noch gewisse Bugs bei der Entstehung von \say{edge cases} \cite{edgecase} bei bestimmten, einzelnen Emails.\\
 
-Ursprünglich wurde zusätzlich ein Pluginmanager - dabei angelehnt an die Funktionsweise von vim-plug\cite{plug} - geplant einzubauen, doch diese Idee wurde mittlerweile verworfen, da es als weitaus sinnvoller und effizienter angesehen wurde von den Autoren einfach klassische Patches zu verwenden für solche Dinge ähnlich wie dies bei der suckless.org Software \cite{dwm}.
+Ursprünglich wurde zusätzlich ein Pluginmanager - dabei angelehnt an die Funktionsweise von vim-plug\cite{plug} - geplant einzubauen, doch diese Idee wurde mittlerweile verworfen, da es als weitaus sinnvoller und effizienter, von den Autoren, angesehen wurde, einfach klassische Patches zu verwenden. Ähnlich wie dies bei der suckless.org Software ist. \cite{dwm}
 
 \subsection{Vergleich mit der Konkurrenz}
-Es ist gar nicht so einfach diese App zu vergleichen mit ihrer Konkurrenz, da sie ja noch nicht fertig entwickelt ist. Aus diesem Standpunkt heraus vergleichen wir nur die fertigen Funktionen mit der Konkurrenz.\\
+Es ist gar nicht so einfach diese App zu vergleichen mit ihrer Konkurrenz, da sie noch nicht fertig entwickelt ist. Aus diesem Standpunkt heraus vergleichen wir nur die fertigen Funktionen mit der Konkurrenz.\\
 
-Im Vergleich mit der Konkurrenz sticht sie heraus durch ihre simple Art, so wie das geplant war. Die Funktionalitäten sind dabei auch wesentlich rüdimentärer, oder besser gesagt mehr \say{suckless} als die der Konkurrenz. Die Farben und das Layout des User Interface sollte zwar simpel sein, doch das visuelle Zusammenspielen von Farben und dem Layout haben gewisse Konkurrenzprodukte, welche immerhin auch von Fortune 500 Unternehmen entwickelt werden, zweifelsohne besser umgesetzt als die Autoren dieser App.
+Im Vergleich mit der Konkurrenz, sticht sie heraus durch ihre simple Art, so wie das geplant war. Die Funktionalitäten sind dabei auch wesentlich rüdimentärer, oder besser gesagt mehr \say{suckless} als die der Konkurrenz. Die Farben und das Layout des User Interface sollte zwar simpel sein, doch das visuelle Zusammenspielen von Farben und dem Layout haben gewisse Konkurrenzprodukte, welche immerhin auch von Fortune 500 Unternehmen entwickelt werden, zweifelsohne besser umgesetzt als die Autoren dieser App.
 \subsection{Vor- und Nachteile unserer App}
 \subsubsection{Pro}
 Für die Nutzung der App sprechen simple Nutzeroberfläche und Codebasis, welche nach Fertigstellung der initialen Entwicklung eine der besten simplen Email Client werden sollte.
 \subsubsection{Kontra}
-Dagegen sprechen, dass gewisse Funktionen welche laut den Autoren nicht in einen Emailclient gehören nicht vorhanden sind, wie beispielsweise die Funktionalität RSS Feeds zu lesen, wie es der allseits bekannte Mailclient \cite{thunderbird}.
+Dagegen sprechen, dass gewisse Funktionen welche laut den Autoren nicht in einen Emailclient gehören nicht vorhanden sind, wie beispielsweise die Funktionalität RSS Feeds zu lesen, wie es der allseits bekannte Mailclient Thunderbird .\cite{thunderbird}
 
 \section{Selbstreflexion}
 
 \subsection{Was Gut Lief}
 % komm., vcs, java syntax (allg.)
-Das Arbeiten mit \textit{Git} als \textit{Version Control System} verlief gut und half ihrer Meinnung nach enorm beim Arbeitsprozess und dessen Strukturierung. Mit der Syntax der verwendeten Programmier- und Markupsprachen Java, Python und XML konnte gut umgegangen werden, obwohl die beiden noch recht wenig Erfahrung mit Java hatten. Die Codestruktur fanden sie den Umständen entsprechen gut und sinnvoll.
+Das Arbeiten mit \textit{Git} als \textit{Version Control System} verlief gut und half enorm beim Arbeitsprozess und dessen Strukturierung. Mit der Syntax der verwendeten Programmier- und Markupsprachen Java, Python und XML konnte gut umgegangen werden, obwohl die beiden noch recht wenig Erfahrung mit Java hatten. Die Codestruktur fanden sie den Umständen entsprechen gut und sinnvoll.
 \subsection{Was Schlecht Lief}
 % ******* java shit tier libraries
-Dass es keine mit Gradle funktionierede, ausreichend dokumentierte und/oder nicht veraltete IMAP- und Emailbibliotheken für Java. Deshalb wichen wir auf die um Welten besser funktionierende Pythonbibliotheken \textit{imap} und \textit{emaillib} aus. Dazu mussten wir eine Library namens \textit{Chaquopy} benutzen, um Python als Bytecode kompiliert in unsere Java App einbauen zu können. Das ist natürlich unschön, aber die Funktionalität wär halt die oberste Priorität.\\
+Dass es keine mit Gradle funktionierede, ausreichend dokumentierte und/oder nicht veraltete IMAP- und Emailbibliotheken für Java gibt. Deshalb wichen wir auf die um Welten besser funktionierende Pythonbibliotheken \textit{imap} und \textit{emaillib} aus. Dazu mussten wir eine Library namens \textit{Chaquopy} benutzen, um Python als Bytecode kompiliert in unsere Java App einbauen zu können. Das ist natürlich unschön, aber die Funktionalität hatte die oberste Priorität.\\
 
 Etwas das nicht direkt schlecht lief aber sehr viel Zeit brauchte ist, dass wenn ich (Simon) zum Beispiel eine Database für den Recyclerviewer gemacht habe, zwar nur eine Testversion, 
 ich diese im späteren verlauf komplett überarbeiten durfte. Es war zwar nur eine Testversion aber dass diese so weit von einer professionelle Database entfernt war, war mit nicht klar. 
 In so einer Situation war ich nicht nur bei der Database. Mit dem Recyclerviewer hatte ich solche Probleme sogar öfters. Oft hat zwar noch nicht viel funktioniert aber ich musste den Recyclerviewer
-öfters komplett umschreiben. Als ich die erste Version hatte, hatte ich eine sehr simple version einer Database und durch dies hat sich auch ein simpler Adapter entwickelt. 
-Aber diesen konnte ich mit der Zeit sehr gut an de Recyclerviewer anpassen. Ich habe ihn auch sehr stark ausgebaut. Als ich jedoch eine vollstendige Version einer Database hatte, musste ich den 
-Adapter so gut wie löschen. Solche Dinge haben den Arbeitsprozess sehr stark ausgebremst und die Arbeit begann mich zu nerven, da teilweise klar war, dass ich das was ich gerade
-mache sowieso nochmals überarbeiten muss. 
+öfters komplett umschreiben. 
+
 
+%TODO:@Noah dinni Meinig dezue?
+Etwas das sicher hätte besser laufen sollen, war das Zeitmanagement. Ich glaub aber auch, das uns nicht ganz klar war, wie viel 
+noch vor uns liegt. Wir waren fast immer in Zeitverzögerung. Immer Sommer dachten wir noch wir wären perfekt in der Zeit und dies wurde uns auch bestätigt. Jedoch
+als wir aus den Sommerferien kamen, wurde uns bewusst wie viel es noch zu tu gibt. Wir haben alles gegeben, jedoch wurde die App leider nicht Fertig. 
 \subsection{Was Wir Gleich Machen Würden}
 % As long as java is not deprecated in the future for android programming, we would still use it as it is the most ``native'' way of programming. The new java clone/fork of google, Kotlin, would be a worse choice in our eyes, as your are even more dependent on google code, which you are already by using android.
 Wenn wir diese in die Vergangenheit reisen könnten und die App von Neuem machen könnten, würden wir am Userdesign nichts ändern, und auch weiterhin mit \textit{Git} als \textit{VCS} arbeiten und für jedes noch nicht einsatzbereite Feature einen neuen \textit{Branch} machen. Die Arbeitsweise an sich hat sich aus unserer Sicht bewährt und ist ein passabler Weg, kollaborativ an einem Softwareprojekt zu arbeiten.
@@ -1107,12 +1248,14 @@ würden uns mehr gedankten machen beim Planen wie auch, wie lange wir an einem P
 \subsection{abschliessende persönliche Schlussfolgerung}
 Wir haben das Gefühl, einen guten ersten Einblick in die native Android Programmierung mit Java und Python bekommen zu haben. Wir haben uns vertraut gemacht mit den Vorzügen aber auch Nachteilen dieser Art von Programmierung und der Plattform Android.\\
 
-Wir sind zwar etwas enttäuscht, dass wir nicht alle geplanten Ziele erreicht haben, doch wir haben noch genug Motivation die App in den nächsten paar Wochen und Monaten fertigzustellen. Denn die Arbeit hat uns insgesamt doch gefallen, trotz einigen Motivationstiefs, sodass wir auch gerne unseren Freunden und Familie von ihr erzählt haben.\\
+Wir sind zwar etwas enttäuscht, dass wir nicht alle geplanten Ziele erreicht haben, doch wir haben noch genug Motivation die App in den nächsten paar Wochen und Monaten fertigzustellen. Denn die Arbeit hat uns insgesamt doch gefallen, trotz einigen Motivationstiefs, sodass wir auch gerne unseren Freunden und Familie von ihr erzählt haben.
+Wir können sicher sage, dass wir jetzt eine Smartphone App als grösseres Projekt ansehen als das was wir dachten. Eine App ist nicht so simple wie wir erwartet haben.\\
 
 Was uns auch noch sehr gefallen hat ist das Arbeiten mit dem Version Control System \textit{Git} und der Plattfrom \textit{Github}, denn so konnte man gut den Fortschritt sehen und tracken, schliesslich machte das kollaborative Arbeiten an einem Projekt dieser Grösse besonderns Sinn und konnte gut Nutzen machen von der Funktionalität dieses Systems.
+Dazu war das eine sehr gute Lehre wie später in grösseren Teams solche Programme entstehen. Wir sind jetzt sicher etwas besser ausgerüstet als andere.
 
 \section{Danksagung}
-Wir (Simon und Noah) möchten uns bedanken bei unserer Betreuungslehrperson Dr. Viktor Yakonthov, und unserem Koreferenten D. Bühler bedanken, dass sie uns die Arbeit erlaubt haben durchzuführen und ihre Bereitschaft, zu Helfen bei allfälligen Fragen.\gls{fsf}\gls{freie Software}
+Wir (Simon und Noah) möchten uns bei unserer Betreuungslehrperson Dr. Viktor Yakonthov, und unserem Koreferenten D. Bühler bedanken, dass sie uns die Arbeit erlaubt haben durchzuführen und ihre Bereitschaft, zu Helfen bei allfälligen Fragen gezeigt haben.\gls{fsf}\gls{freie Software}
 
 \clearpage
 \printglossary