@@ -3,189 +3,17 @@ package co.yml.ychatgpt.android
3
3
import android.os.Bundle
4
4
import androidx.activity.ComponentActivity
5
5
import androidx.activity.compose.setContent
6
- import androidx.compose.foundation.Image
7
- import androidx.compose.foundation.layout.Arrangement
8
- import androidx.compose.foundation.layout.Column
9
- import androidx.compose.foundation.layout.Row
10
- import androidx.compose.foundation.layout.Spacer
11
- import androidx.compose.foundation.layout.fillMaxSize
12
- import androidx.compose.foundation.layout.fillMaxWidth
13
- import androidx.compose.foundation.layout.height
14
- import androidx.compose.foundation.layout.padding
15
- import androidx.compose.foundation.layout.width
16
- import androidx.compose.material.MaterialTheme
17
- import androidx.compose.material.Scaffold
18
- import androidx.compose.material.Surface
19
- import androidx.compose.material.Text
20
- import androidx.compose.material.icons.Icons
21
- import androidx.compose.material.icons.filled.Edit
22
- import androidx.compose.material.rememberScaffoldState
23
- import androidx.compose.runtime.Composable
24
- import androidx.compose.runtime.LaunchedEffect
25
- import androidx.compose.runtime.getValue
26
- import androidx.compose.runtime.mutableStateListOf
27
- import androidx.compose.runtime.mutableStateOf
28
- import androidx.compose.runtime.remember
29
- import androidx.compose.runtime.rememberCoroutineScope
30
- import androidx.compose.runtime.setValue
31
- import androidx.compose.ui.Alignment
32
- import androidx.compose.ui.Modifier
33
- import androidx.compose.ui.res.painterResource
34
- import androidx.compose.ui.res.stringResource
35
- import androidx.compose.ui.text.font.FontWeight
36
- import androidx.compose.ui.unit.sp
37
6
import androidx.lifecycle.lifecycleScope
38
- import androidx.navigation.NavHostController
39
- import androidx.navigation.compose.NavHost
40
- import androidx.navigation.compose.composable
41
- import androidx.navigation.compose.rememberNavController
42
7
import co.yml.ychatgpt.ChatGpt
43
- import co.yml.ychatgpt.android.ui.AppBar
44
- import co.yml.ychatgpt.android.ui.ChatLayout
45
- import co.yml.ychatgpt.android.ui.Dimensions.spaceMedium
46
- import co.yml.ychatgpt.android.ui.Dimensions.splashIconSize
47
- import co.yml.ychatgpt.android.ui.DrawerBody
48
- import co.yml.ychatgpt.android.ui.DrawerHeader
49
- import co.yml.ychatgpt.android.ui.SendMessageLayout
50
- import kotlinx.coroutines.delay
51
- import kotlinx.coroutines.launch
52
- import kotlin.coroutines.CoroutineContext
8
+ import org.koin.androidx.viewmodel.ext.android.viewModel
53
9
54
10
class MainActivity : ComponentActivity () {
55
11
56
- private val chatGpt by lazy { ChatGpt .create(BuildConfig .API_KEY ) }
57
-
58
- private val myCoroutineContext by lazy { lifecycleScope.coroutineContext }
59
-
60
12
override fun onCreate (savedInstanceState : Bundle ? ) {
61
13
super .onCreate(savedInstanceState)
62
14
setContent {
63
15
MyApplicationTheme () {
64
- Navigation (chatGpt, myCoroutineContext)
65
- }
66
- }
67
- }
68
- }
69
-
70
- @Composable
71
- fun Navigation (chatGpt : ChatGpt , myCoroutineContext : CoroutineContext ) {
72
- val navController = rememberNavController()
73
-
74
- NavHost (
75
- navController = navController,
76
- startDestination = " splash_screen"
77
- ) {
78
-
79
- composable(" splash_screen" ) {
80
- SplashScreen (navController)
81
- }
82
-
83
- composable(" main_screen" ) {
84
- MainScreen (chatGpt, myCoroutineContext)
85
- }
86
- }
87
-
88
- }
89
-
90
- @Composable
91
- fun MainScreen (chatGpt : ChatGpt , myCoroutineContext : CoroutineContext ) {
92
- val scaffoldState = rememberScaffoldState()
93
- val scope = rememberCoroutineScope()
94
- var chatGptAnswer by remember {
95
- mutableStateOf(" " )
96
- }
97
- val items = remember {
98
- mutableStateListOf<MessageItem >()
99
- }
100
- Scaffold (
101
- scaffoldState = scaffoldState,
102
- topBar = {
103
- AppBar (
104
- onNavigationItemClick = {
105
- scope.launch {
106
- scaffoldState.drawerState.open()
107
- }
108
- }
109
- )
110
- },
111
- drawerContent = {
112
- DrawerHeader ()
113
- DrawerBody (items = listOf (
114
- MenuItem (
115
- id = " completion" ,
116
- title = stringResource(R .string.completion),
117
- contentDescription = " completion" ,
118
- icon = Icons .Default .Edit
119
- ),
120
- MenuItem (
121
- id = " edits" ,
122
- title = stringResource(R .string.edits),
123
- contentDescription = " edit" ,
124
- icon = Icons .Default .Edit
125
- )
126
-
127
- ), onItemClick = {
128
- // do nothing
129
- })
130
- },
131
- content = { padding ->
132
- Column (
133
- modifier = Modifier
134
- .fillMaxSize()
135
- .padding(padding),
136
- verticalArrangement = Arrangement .Center ,
137
- horizontalAlignment = Alignment .CenterHorizontally
138
- ) {
139
- ChatLayout (items)
140
- }
141
- },
142
- bottomBar = {
143
- SendMessageLayout (onSendMessage = {
144
- scope.launch {
145
- items.add(MessageItem (message = it, isOut = true ))
146
- chatGptAnswer = chatGpt.completion(it)
147
- items.add(MessageItem (message = chatGptAnswer, isOut = false ))
148
- }
149
- })
150
- },
151
- )
152
- }
153
-
154
- @Composable
155
- fun SplashScreen (navController : NavHostController ) {
156
-
157
- LaunchedEffect (key1 = true ) {
158
- delay(2000L )
159
- navController.navigate(" main_screen" )
160
- }
161
-
162
- Surface (
163
- modifier = Modifier .fillMaxWidth(),
164
- color = MaterialTheme .colors.background,
165
- ) {
166
- Column (
167
- modifier = Modifier .fillMaxSize(),
168
- verticalArrangement = Arrangement .Center ,
169
- horizontalAlignment = Alignment .CenterHorizontally ,
170
- ) {
171
- Row (
172
- modifier = Modifier .fillMaxWidth(),
173
- horizontalArrangement = Arrangement .Center ,
174
- verticalAlignment = Alignment .CenterVertically
175
- ) {
176
- Image (
177
- painterResource(R .drawable.ic_chat),
178
- contentDescription = stringResource(R .string.logo),
179
- modifier = Modifier
180
- .width(splashIconSize)
181
- .height(splashIconSize)
182
- )
183
- Spacer (modifier = Modifier .width(spaceMedium))
184
- Text (
185
- text = stringResource(R .string.ychat_gpt),
186
- fontSize = 26 .sp,
187
- fontWeight = FontWeight .Bold
188
- )
16
+ Navigation ()
189
17
}
190
18
}
191
19
}
0 commit comments