Skip to content

Commit

Permalink
Combine AiActivity to AiGenerateFragment
Browse files Browse the repository at this point in the history
  • Loading branch information
eunyoungKim0728 committed Feb 18, 2024
1 parent e0ca287 commit 386cb70
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider
import com.example.pa.R
import com.example.pa.databinding.FragmentAiGenerateBinding

class AiGenerateFragment : Fragment() {
Expand All @@ -21,12 +22,25 @@ class AiGenerateFragment : Fragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val slideshowViewModel =
val viewModel =
ViewModelProvider(this).get(AiGenerateViewModel::class.java)

_binding = FragmentAiGenerateBinding.inflate(inflater, container, false)
val root: View = binding.root

viewModel.text.observe(viewLifecycleOwner) { responseText ->
binding.aiGenerateResponse.text = responseText
}

binding.aiGenerateButton.setOnClickListener {
val userInput = binding.aiGenerateTopicInput.text.toString()
if (userInput.isNotEmpty()) {
viewModel.fetchChatCompletion(userInput)
} else {
binding.aiGenerateResponse.text = getString(R.string.ai_generate_topic_input_hint)
}
}

return root
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,44 @@ package com.example.pa.ui.aigenerate
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.aallam.openai.api.BetaOpenAI
import com.aallam.openai.api.chat.ChatCompletion
import com.aallam.openai.api.chat.ChatCompletionRequest
import com.aallam.openai.api.chat.ChatMessage
import com.aallam.openai.api.chat.ChatRole
import com.aallam.openai.api.model.ModelId
import com.aallam.openai.client.OpenAI
import com.example.pa.BuildConfig
import kotlinx.coroutines.launch

class AiGenerateViewModel : ViewModel() {

private val _text = MutableLiveData<String>().apply {
value = "This is aigenerate Fragment"
}
private val openAI = OpenAI(BuildConfig.OPEN_AI_KEY)

private val _text = MutableLiveData<String>()
val text: LiveData<String> = _text


@OptIn(BetaOpenAI::class)
fun fetchChatCompletion(userInput: String) {
viewModelScope.launch {
val chatCompletionRequest = ChatCompletionRequest(
model = ModelId("gpt-3.5-turbo"),
messages = listOf(
ChatMessage(
role = ChatRole.System,
content = "You are a helpful assistant!"
),
ChatMessage(
role = ChatRole.User,
content = userInput
)
)
)

val completion: ChatCompletion = openAI.chatCompletion(chatCompletionRequest)
_text.postValue(completion.choices.first().message?.content ?: "No response")
}
}
}
22 changes: 6 additions & 16 deletions app/src/main/java/com/example/pa/ui/home/HomeFragment.kt
Original file line number Diff line number Diff line change
@@ -1,23 +1,17 @@
package com.example.pa.ui.home


import android.content.Intent
import android.R

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.fragment.app.commit
import androidx.fragment.app.replace
import androidx.lifecycle.ViewModelProvider
import com.example.pa.AiActivity
import androidx.navigation.fragment.findNavController
import com.example.pa.R
import com.example.pa.databinding.FragmentHomeBinding
import com.example.pa.ui.gallery.GalleryFragment


class HomeFragment : Fragment() {
Expand All @@ -44,24 +38,20 @@ class HomeFragment : Fragment() {
textView.text = it
}


binding.buttonOpenAiActivity.setOnClickListener {
startActivity(Intent(context, AiActivity::class.java))

val buttonNotPaid: Button = binding.btnNotPaid
buttonNotPaid.setOnClickListener {
// Code here executes on main thread after user presses button
// TODO:come back
findNavController().navigate(com.example.pa.R.id.fragment_gallery)
}
val buttonPaid: Button = binding.btnNotPaid
buttonPaid.setOnClickListener {
// Code here executes on main thread after user presses button
// TODO:come back

val buttonAI: Button = binding.btnAi
buttonAI.setOnClickListener {
findNavController().navigate(R.id.nav_aiGenerate)
}
return root
}


override fun onDestroyView() {
super.onDestroyView()
_binding = null
Expand Down
10 changes: 10 additions & 0 deletions app/src/main/res/layout/fragment_ai_generate.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,5 +47,15 @@
android:layout_marginTop="50dp"
android:layout_below="@+id/ai_generate_topic_input"
android:text="@string/ai_generate_topic_button"/>

<TextView
android:id="@+id/ai_generate_response"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="40dp"
android:layout_below="@+id/ai_generate_button"
android:textSize="30sp"
android:text="@string/ai_generate_response_answer" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
14 changes: 1 addition & 13 deletions app/src/main/res/layout/fragment_home.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,6 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<Button

android:id="@+id/button_open_ai_activity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Open AI Activity"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.456"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.724" />

<Button
android:id="@+id/btn_notPaid"
Expand All @@ -44,7 +32,7 @@
app:layout_constraintStart_toStartOf="parent" />

<Button
android:id="@+id/btn_paid"
android:id="@+id/btn_ai"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="80dp"
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/navigation/mobile_navigation.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
tools:layout="@layout/fragment_gallery" />

<fragment
android:id="@+id/nav_slideshow"
android:id="@+id/nav_aiGenerate"
android:name="com.example.pa.ui.aigenerate.AiGenerateFragment"
android:label="@string/menu_ai_generate"
tools:layout="@layout/fragment_ai_generate" />
Expand Down
1 change: 1 addition & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@
<string name="ai_generate_topic_title">Topic</string>
<string name="ai_generate_topic_input_hint">Enter your topic</string>
<string name="ai_generate_topic_button">Generate</string>
<string name="ai_generate_response_answer" />
</resources>
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@ kotlin.code.style=official
android.nonTransitiveRClass=true

# This is OpenAIKey
OpenAIKey="Your key here"
OpenAIKey="Your API Key"

0 comments on commit 386cb70

Please sign in to comment.