diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..d6ccb4c --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +ChatGpt \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 0ad17cb..8978d23 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,4 +1,3 @@ - diff --git a/README.md b/README.md new file mode 100644 index 0000000..ad50764 --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +# app_entwicklung_BFAX422A +# Einleitung: +Das Feature, welches ich für die ChatGPT App programmiert habe, eröffnet die Möglichkeit mit ChatGPT, durch eine App, mit Text zu kommunizieren. Diese Funktion ist praktisch, wenn man beispielsweise in einer Umgebung ist, in der man leise sein muss oder nicht reden darf. + +# Anforderungen: +Die Erweiterung soll ein Textfield hinzufügen, damit man mit dem Keyboard eine Anfrage an ChatGPT schreiben kann. + +# Umsetzung: +Für die Umsetzung meines Features musste ich ein Textfield, einen Button und eine TextView in der Fragment XML Datei hinzufügen. Das Textfeld wird benutzt, um dort die Frage an ChatGPT hereinzuschreiben. Der Button wird verwendet, damit die Frage, die man in das Textfeld schreibt, an ChatGPT weitergeleiten wird. Die TextView dient dazu das Textfeld zu beschreiben, damit der Benutzer weiß, wofür das Textfeld ist. +Des Weiteren habe ich die Namen dieser drei Layouts in die Strings.xml Datei geschrieben, sodass die Sprache sich automatisch nach der Systemsprache des Handys anpasst (Englisch, Deutsch). +Dies habe ich im Code umgesetzt mit zwei neuen Methoden namens getSubmitButton() und getTextText(). Diese beiden Methoden geben die ID von dem Textfield und dem Button zurück. Des Weiteren habe ich in der onViewCreated() Methode einen onClickListener für den neuen Butten eingefügt. Im onClickListener wird die Klasse „Message“ aufgerufen und ein neues Objekt mit den Attributen Autor und die eingegebene Frage erzeugt. Anschließend wird der API-Token aus den Settings geholt und ein neues Objekt der Klasse „ChatGPT“ mit diesem Token erzeugt, damit die Frage an ChatGPT weitergeleitet wird. Zu guter Letzt wird die Antwort von ChatGPT in der TextView ausgegeben. + +# Probleme/Lessons learned: +Am Anfang hatte ich versucht die Texteingabe mit TextInputLayout umzusetzen, aber dies hatte nicht funktioniert, weswegen ich den Plain Text verwendet habe. +Ich habe gelernt, wie man neue Components in einer Android App hinzufügt und richtig anordnet (Constraints mit anderen Components verbinden) und was die Bibliothek von Android alles zu bieten hat. + +# Fazit: +Ich konnte bei diesem Feature alles umsetzten wie geplant. Auch der Zeitaufwand von 7 Stunden war vorhersehbar. + diff --git a/app/src/main/java/de/fhdw/app_entwicklung/chatgpt/MainFragment.java b/app/src/main/java/de/fhdw/app_entwicklung/chatgpt/MainFragment.java index 0d8dded..752a990 100644 --- a/app/src/main/java/de/fhdw/app_entwicklung/chatgpt/MainFragment.java +++ b/app/src/main/java/de/fhdw/app_entwicklung/chatgpt/MainFragment.java @@ -5,6 +5,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.EditText; import android.widget.TextView; import androidx.activity.result.ActivityResultLauncher; @@ -76,6 +77,29 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat getAskButton().setOnClickListener(v -> getTextFromSpeech.launch(new LaunchSpeechRecognition.SpeechRecognitionArgs(Locale.GERMAN))); + + getSubmitButton().setOnClickListener(v ->{ + EditText text = (EditText) getTextText(); + + Message userMessage = new Message(Author.User, text.getText().toString()); + chat.addMessage(userMessage); + if (chat.getMessages().size() > 1) { + getTextView().append(CHAT_SEPARATOR); + } + getTextView().append(toString(userMessage)); + + MainActivity.backgroundExecutorService.execute(() -> { + String apiToken = prefs.getApiToken(); + ChatGpt chatGpt = new ChatGpt(apiToken); + String answer = chatGpt.getChatCompletion(chat); + + Message answerMessage = new Message(Author.Assistant, answer); + chat.addMessage(answerMessage); + getTextView().append(CHAT_SEPARATOR); + getTextView().append(toString(answerMessage)); + }); + }); + updateTextView(); } @@ -126,4 +150,11 @@ private Button getAskButton() { return getView().findViewById(R.id.button_ask); } + private Button getSubmitButton() { + return getView().findViewById(R.id.button_sub); + } + + private EditText getTextText(){ + return getView().findViewById(R.id.editTextText); + } } \ No newline at end of file diff --git a/app/src/main/java/de/fhdw/app_entwicklung/chatgpt/README b/app/src/main/java/de/fhdw/app_entwicklung/chatgpt/README new file mode 100644 index 0000000..22661f5 --- /dev/null +++ b/app/src/main/java/de/fhdw/app_entwicklung/chatgpt/README @@ -0,0 +1,35 @@ +Einleitung: +Das Feature, welches ich für die ChatGPT App programmiert habe, eröffnet die Möglichkeit mit ChatGPT, +durch eine App, mit Text zu kommunizieren. Diese Funktion ist praktisch, wenn man beispielsweise in +einer Umgebung ist, in der man leise sein muss oder nicht reden darf. + +Anforderungen: +Die Erweiterung soll ein Textfield hinzufügen, damit man mit dem Keyboard eine Anfrage an ChatGPT +schreiben kann. + +Umsetzung: +Für die Umsetzung meines Features musste ich ein Textfield, einen Button und eine TextView in der +Fragment XML Datei hinzufügen. Das Textfeld wird benutzt, um dort die Frage an ChatGPT +hereinzuschreiben. Der Button wird verwendet, damit die Frage, die man in das Textfeld schreibt, +an ChatGPT weitergeleiten wird. Die TextView dient dazu das Textfeld zu beschreiben, damit der +Benutzer weiß, wofür das Textfeld ist. +Des Weiteren habe ich die Namen dieser drei Layouts in die Strings.xml Datei geschrieben, sodass +die Sprache sich automatisch nach der Systemsprache des Handys anpasst (Englisch, Deutsch). +Dies habe ich im Code umgesetzt mit zwei neuen Methoden namens getSubmitButton() und getTextText(). +Diese beiden Methoden geben die ID von dem Textfield und dem Button zurück. Des Weiteren habe ich +n der onViewCreated() Methode einen onClickListener für den neuen Butten eingefügt. Im +onClickListener wird die Klasse „Message“ aufgerufen und ein neues Objekt mit den Attributen Autor +und die eingegebene Frage erzeugt. Anschließend wird der API-Token aus den Settings geholt und ein +neues Objekt der Klasse „ChatGPT“ mit diesem Token erzeugt, damit die Frage an ChatGPT +weitergeleitet wird. Zu guter Letzt wird die Antwort von ChatGPT in der TextView ausgegeben. + +Probleme/Lessons learned: +Am Anfang hatte ich versucht die Texteingabe mit TextInputLayout umzusetzen, aber dies hatte nicht +funktioniert, weswegen ich den Plain Text verwendet habe. +Ich habe gelernt, wie man neue Components in einer Android App hinzufügt und richtig anordnet +(Constraints mit anderen Components verbinden) und was die Bibliothek von Android alles zu bieten +hat. + +Fazit: +Ich konnte bei diesem Feature alles umsetzten wie geplant. Auch der Zeitaufwand von 7 +Stunden war vorhersehbar. diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml index 73c25fa..cbb9adf 100644 --- a/app/src/main/res/layout/fragment_main.xml +++ b/app/src/main/res/layout/fragment_main.xml @@ -11,7 +11,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" - tools:context=".MainActivity" > + tools:context=".MainActivity"> + app:layout_constraintTop_toBottomOf="@+id/editTextText" />