Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Timon App Projekt #5

Open
wants to merge 7 commits into
base: e11_save_chat
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .idea/.name

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -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.

Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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();
}

Expand Down Expand Up @@ -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);
}
}
35 changes: 35 additions & 0 deletions app/src/main/java/de/fhdw/app_entwicklung/chatgpt/README
Original file line number Diff line number Diff line change
@@ -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.
41 changes: 38 additions & 3 deletions app/src/main/res/layout/fragment_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
tools:context=".MainActivity">

<TextView
android:id="@+id/textView"
Expand All @@ -23,8 +23,7 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
app:layout_constraintTop_toBottomOf="@+id/editTextText" />

<Button
android:id="@+id/button_ask"
Expand All @@ -36,5 +35,41 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />

<Button
android:id="@+id/button_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="21dp"
android:text="@string/sub"
app:layout_constraintBottom_toTopOf="@+id/textView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.515"
app:layout_constraintStart_toEndOf="@+id/editTextText"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0" />

<EditText
android:id="@+id/editTextText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="text"
android:text="@string/editText"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.398"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView2" />

<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="@string/textEigabeText"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.253"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>
3 changes: 3 additions & 0 deletions app/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,7 @@
<resources>
<string name="ask">Fragen</string>
<string name="settings">Einstellungen</string>
<string name="sub">Senden</string>
<string name="textEigabeText">Hier Text eingeben:</string>
<string name="editText">" "</string>
</resources>
3 changes: 3 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,7 @@
<string name="app_name" translatable="false">ChatGpt</string>
<string name="ask">Ask</string>
<string name="settings">Settings</string>
<string name="sub">Send</string>
<string name="textEigabeText">Text input here:</string>
<string name="editText">" "</string>
</resources>