Лаб 2 выглядит как предварительный конец 2 лабы
This commit is contained in:
parent
16d85c07d0
commit
b20055a9c7
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -9,38 +9,28 @@
|
|||||||
<option name="autoReloadType" value="NONE" />
|
<option name="autoReloadType" value="NONE" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="dc3793c7-c725-42e8-8eda-044c95f334c1" name="Changes" comment="Лаб 2 нало работы с пользователем">
|
<list default="true" id="dc3793c7-c725-42e8-8eda-044c95f334c1" name="Changes" comment="Лаб 2 питомцы просто добавлены">
|
||||||
<change afterPath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/EditPet.kt" afterDir="false" />
|
||||||
<change afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/CreatePet.kt" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/PlayPet.kt" afterDir="false" />
|
||||||
<change afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/models/user/composeui/PetList.kt" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/app/src/main/res/drawable/avatar.jpg" afterDir="false" />
|
||||||
<change afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/models/user/model/Pet.kt" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/report/~$Lab1.docx" afterDir="false" />
|
||||||
<change afterPath="$PROJECT_DIR$/app/src/main/res/drawable/pet1.jpg" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/app/src/main/res/drawable/pet2.jpg" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/app/src/main/res/drawable/pet3.jpg" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/app/src/main/res/drawable/pet4.jpg" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/app/src/main/res/drawable/pet5.jpg" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/app/src/main/res/drawable/pet6.jpg" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/app/src/main/res/drawable/pet7.jpg" afterDir="false" />
|
|
||||||
<change afterPath="$PROJECT_DIR$/app/src/main/res/drawable/pet8.jpg" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/.gradle/8.0/checksums/checksums.lock" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/8.0/checksums/checksums.lock" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/.gradle/8.0/checksums/md5-checksums.bin" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/8.0/checksums/md5-checksums.bin" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/.gradle/8.0/checksums/sha1-checksums.bin" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/8.0/checksums/sha1-checksums.bin" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/.gradle/8.0/executionHistory/executionHistory.bin" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/8.0/executionHistory/executionHistory.bin" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.gradle/8.0/executionHistory/executionHistory.bin" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/8.0/executionHistory/executionHistory.bin" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/.gradle/8.0/executionHistory/executionHistory.lock" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/8.0/executionHistory/executionHistory.lock" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.gradle/8.0/executionHistory/executionHistory.lock" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/8.0/executionHistory/executionHistory.lock" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/.gradle/8.0/fileHashes/fileHashes.bin" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/8.0/fileHashes/fileHashes.bin" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.gradle/8.0/fileHashes/fileHashes.bin" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/8.0/fileHashes/fileHashes.bin" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/.gradle/8.0/fileHashes/fileHashes.lock" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/8.0/fileHashes/fileHashes.lock" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.gradle/8.0/fileHashes/fileHashes.lock" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/8.0/fileHashes/fileHashes.lock" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/.gradle/8.0/fileHashes/resourceHashesCache.bin" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/8.0/fileHashes/resourceHashesCache.bin" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.gradle/8.0/fileHashes/resourceHashesCache.bin" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/8.0/fileHashes/resourceHashesCache.bin" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/.gradle/buildOutputCleanup/buildOutputCleanup.lock" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/buildOutputCleanup/buildOutputCleanup.lock" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.gradle/buildOutputCleanup/buildOutputCleanup.lock" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/buildOutputCleanup/buildOutputCleanup.lock" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/.gradle/buildOutputCleanup/outputFiles.bin" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/buildOutputCleanup/outputFiles.bin" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/.gradle/file-system.probe" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/file-system.probe" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.gradle/file-system.probe" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/file-system.probe" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/app/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/app/build.gradle.kts" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/app/build.gradle.kts" beforeDir="false" afterPath="$PROJECT_DIR$/app/build.gradle.kts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/CreatePet.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/CreatePet.kt" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/Home.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/Home.kt" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/Home.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/Home.kt" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/Profile.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/Profile.kt" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/Profile.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/Profile.kt" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/navigation/MyPage.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/navigation/MyPage.kt" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/navigation/MyPage.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/navigation/MyPage.kt" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/navigation/Screen.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/navigation/Screen.kt" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/navigation/Screen.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/navigation/Screen.kt" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/models/user/composeui/UserList.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/models/user/composeui/UserList.kt" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/models/user/composeui/PetList.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/models/user/composeui/PetList.kt" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/models/user/model/Student.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/models/user/model/User.kt" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/models/user/model/Pet.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/models/user/model/Pet.kt" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/models/user/model/User.kt" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/models/user/model/User.kt" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/app/src/main/res/values/strings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/res/values/strings.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/app/src/main/res/values/strings.xml" beforeDir="false" afterPath="$PROJECT_DIR$/app/src/main/res/values/strings.xml" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
@ -95,8 +85,8 @@
|
|||||||
<component name="FileTemplateManagerImpl">
|
<component name="FileTemplateManagerImpl">
|
||||||
<option name="RECENT_TEMPLATES">
|
<option name="RECENT_TEMPLATES">
|
||||||
<list>
|
<list>
|
||||||
<option value="Kotlin Class" />
|
|
||||||
<option value="Kotlin File" />
|
<option value="Kotlin File" />
|
||||||
|
<option value="Kotlin Class" />
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
@ -112,7 +102,7 @@
|
|||||||
<option name="stateVersion" value="1" />
|
<option name="stateVersion" value="1" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProblemsViewState">
|
<component name="ProblemsViewState">
|
||||||
<option name="selectedTabId" value="CurrentFile" />
|
<option name="selectedTabId" value="ProjectErrors" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectId" id="2WToW0mvjPzND9QiCAmC6MXKLwF" />
|
<component name="ProjectId" id="2WToW0mvjPzND9QiCAmC6MXKLwF" />
|
||||||
<component name="ProjectLevelVcsManager">
|
<component name="ProjectLevelVcsManager">
|
||||||
@ -131,17 +121,20 @@
|
|||||||
"SHARE_PROJECT_CONFIGURATION_FILES": "true",
|
"SHARE_PROJECT_CONFIGURATION_FILES": "true",
|
||||||
"cidr.known.project.marker": "true",
|
"cidr.known.project.marker": "true",
|
||||||
"com.android.tools.idea.devicemanager.tab": "Physical",
|
"com.android.tools.idea.devicemanager.tab": "Physical",
|
||||||
"last_opened_file_path": "C:/Users/Kate/AndroidStudioProjects/Ihonkina_PIbd-31_PMU/app/src/main/java/com/example/pmuapp/models/user/composeui",
|
"last_opened_file_path": "C:/Users/Kate/AndroidStudioProjects/Ihonkina_PIbd-31_PMU/app/src/main/java/com/example/pmuapp/composeui/navigation",
|
||||||
"settings.editor.selected.configurable": "experimental"
|
"settings.editor.selected.configurable": "experimental"
|
||||||
}
|
}
|
||||||
}]]></component>
|
}]]></component>
|
||||||
<component name="RecentsManager">
|
<component name="RecentsManager">
|
||||||
<key name="CopyFile.RECENT_KEYS">
|
<key name="CopyFile.RECENT_KEYS">
|
||||||
|
<recent name="C:\Users\Kate\AndroidStudioProjects\Ihonkina_PIbd-31_PMU\app\src\main\java\com\example\pmuapp\composeui\navigation" />
|
||||||
<recent name="C:\Users\Kate\AndroidStudioProjects\Ihonkina_PIbd-31_PMU\app\src\main\java\com\example\pmuapp\models\user\composeui" />
|
<recent name="C:\Users\Kate\AndroidStudioProjects\Ihonkina_PIbd-31_PMU\app\src\main\java\com\example\pmuapp\models\user\composeui" />
|
||||||
<recent name="C:\Users\Kate\AndroidStudioProjects\Ihonkina_PIbd-31_PMU\app\src\main\java\com\example\pmuapp\composeui" />
|
<recent name="C:\Users\Kate\AndroidStudioProjects\Ihonkina_PIbd-31_PMU\app\src\main\java\com\example\pmuapp\composeui" />
|
||||||
<recent name="C:\Users\Kate\AndroidStudioProjects\Ihonkina_PIbd-31_PMU\app\src\main\res\drawable" />
|
<recent name="C:\Users\Kate\AndroidStudioProjects\Ihonkina_PIbd-31_PMU\app\src\main\res\drawable" />
|
||||||
<recent name="C:\Users\Kate\AndroidStudioProjects\Ihonkina_PIbd-31_PMU\app\src\main\java\com\example\pmuapp" />
|
<recent name="C:\Users\Kate\AndroidStudioProjects\Ihonkina_PIbd-31_PMU\app\src\main\java\com\example\pmuapp" />
|
||||||
<recent name="C:\Users\Kate\AndroidStudioProjects\Ihonkina_PIbd-31_PMU" />
|
</key>
|
||||||
|
<key name="MoveFile.RECENT_KEYS">
|
||||||
|
<recent name="C:\Users\Kate\AndroidStudioProjects\Ihonkina_PIbd-31_PMU\app\src\main\java\com\example\pmuapp\composeui" />
|
||||||
</key>
|
</key>
|
||||||
<key name="MoveKotlinTopLevelDeclarationsDialog.RECENTS_KEY">
|
<key name="MoveKotlinTopLevelDeclarationsDialog.RECENTS_KEY">
|
||||||
<recent name="com.example.pmuapp.composeui" />
|
<recent name="com.example.pmuapp.composeui" />
|
||||||
@ -255,7 +248,14 @@
|
|||||||
<option name="project" value="LOCAL" />
|
<option name="project" value="LOCAL" />
|
||||||
<updated>1697041852651</updated>
|
<updated>1697041852651</updated>
|
||||||
</task>
|
</task>
|
||||||
<option name="localTasksCounter" value="5" />
|
<task id="LOCAL-00005" summary="Лаб 2 питомцы просто добавлены">
|
||||||
|
<created>1697054812374</created>
|
||||||
|
<option name="number" value="00005" />
|
||||||
|
<option name="presentableId" value="LOCAL-00005" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1697054812374</updated>
|
||||||
|
</task>
|
||||||
|
<option name="localTasksCounter" value="6" />
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="Vcs.Log.Tabs.Properties">
|
<component name="Vcs.Log.Tabs.Properties">
|
||||||
@ -287,17 +287,7 @@
|
|||||||
<MESSAGE value="добавление отчета лаб 1" />
|
<MESSAGE value="добавление отчета лаб 1" />
|
||||||
<MESSAGE value="Лаб 2 начало" />
|
<MESSAGE value="Лаб 2 начало" />
|
||||||
<MESSAGE value="Лаб 2 нало работы с пользователем" />
|
<MESSAGE value="Лаб 2 нало работы с пользователем" />
|
||||||
<option name="LAST_COMMIT_MESSAGE" value="Лаб 2 нало работы с пользователем" />
|
<MESSAGE value="Лаб 2 питомцы просто добавлены" />
|
||||||
</component>
|
<option name="LAST_COMMIT_MESSAGE" value="Лаб 2 питомцы просто добавлены" />
|
||||||
<component name="XDebuggerManager">
|
|
||||||
<breakpoint-manager>
|
|
||||||
<breakpoints>
|
|
||||||
<line-breakpoint enabled="true" type="kotlin-line">
|
|
||||||
<url>file://$PROJECT_DIR$/app/src/main/java/com/example/pmuapp/composeui/CreatePet.kt</url>
|
|
||||||
<line>73</line>
|
|
||||||
<option name="timeStamp" value="1" />
|
|
||||||
</line-breakpoint>
|
|
||||||
</breakpoints>
|
|
||||||
</breakpoint-manager>
|
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
@ -5,12 +5,13 @@ plugins {
|
|||||||
|
|
||||||
android {
|
android {
|
||||||
namespace = "com.example.pmuapp"
|
namespace = "com.example.pmuapp"
|
||||||
compileSdk = 33
|
compileSdk = 34
|
||||||
|
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId = "com.example.pmuapp"
|
applicationId = "com.example.pmuapp"
|
||||||
minSdk = 24
|
minSdk = 24
|
||||||
targetSdk = 33
|
targetSdk = 34
|
||||||
versionCode = 1
|
versionCode = 1
|
||||||
versionName = "1.0"
|
versionName = "1.0"
|
||||||
|
|
||||||
@ -50,6 +51,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation ("io.coil-kt:coil-compose:1.4.0")
|
||||||
|
|
||||||
implementation("androidx.core:core-ktx:1.9.0")
|
implementation("androidx.core:core-ktx:1.9.0")
|
||||||
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
|
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
|
||||||
@ -62,6 +64,7 @@ dependencies {
|
|||||||
implementation("androidx.compose.material3:material3")
|
implementation("androidx.compose.material3:material3")
|
||||||
implementation("com.google.android.engage:engage-core:1.3.0")
|
implementation("com.google.android.engage:engage-core:1.3.0")
|
||||||
implementation("androidx.appcompat:appcompat:1.6.1")
|
implementation("androidx.appcompat:appcompat:1.6.1")
|
||||||
|
implementation("androidx.compose.ui:ui-graphics-android:1.5.3")
|
||||||
testImplementation("junit:junit:4.13.2")
|
testImplementation("junit:junit:4.13.2")
|
||||||
androidTestImplementation("androidx.test.ext:junit:1.1.5")
|
androidTestImplementation("androidx.test.ext:junit:1.1.5")
|
||||||
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
|
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
|
||||||
|
@ -10,13 +10,14 @@ import androidx.compose.runtime.*
|
|||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.navigation.NavController
|
||||||
import com.example.pmuapp.R
|
import com.example.pmuapp.R
|
||||||
import com.example.pmuapp.models.user.model.Pet
|
import com.example.pmuapp.models.user.model.Pet
|
||||||
import com.example.pmuapp.models.user.model.User
|
import com.example.pmuapp.models.user.model.User
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun CreatePet(onSaveClick: (Pet) -> Unit) {
|
fun CreatePet(navController: NavController, onSaveClick: (Pet) -> Unit) {
|
||||||
var selectedImage by remember { mutableStateOf(R.drawable.pet1) }
|
var selectedImage by remember { mutableStateOf(R.drawable.pet1) }
|
||||||
var petName by remember { mutableStateOf("") }
|
var petName by remember { mutableStateOf("") }
|
||||||
|
|
||||||
@ -72,10 +73,13 @@ fun CreatePet(onSaveClick: (Pet) -> Unit) {
|
|||||||
Button(
|
Button(
|
||||||
onClick = {
|
onClick = {
|
||||||
if (petName.isNotEmpty()) {
|
if (petName.isNotEmpty()) {
|
||||||
val newPet = Pet(0, petName, selectedImage)
|
val newPet = Pet(0, petName, selectedImage, "")
|
||||||
onSaveClick(newPet)
|
onSaveClick(newPet)
|
||||||
petName = ""
|
petName = ""
|
||||||
selectedImage = R.drawable.pet1
|
selectedImage = R.drawable.pet1
|
||||||
|
|
||||||
|
// Навигация назад на предыдущую страницу
|
||||||
|
navController.popBackStack()
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
modifier = Modifier.fillMaxWidth()
|
modifier = Modifier.fillMaxWidth()
|
||||||
|
117
app/src/main/java/com/example/pmuapp/composeui/EditPet.kt
Normal file
117
app/src/main/java/com/example/pmuapp/composeui/EditPet.kt
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
package com.example.pmuapp.composeui
|
||||||
|
|
||||||
|
import android.os.Build
|
||||||
|
import android.os.Build.*
|
||||||
|
import androidx.annotation.RequiresApi
|
||||||
|
import androidx.compose.foundation.Image
|
||||||
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.layout.Spacer
|
||||||
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.foundation.layout.height
|
||||||
|
import androidx.compose.foundation.layout.heightIn
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.material3.Button
|
||||||
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
|
import androidx.compose.material3.OutlinedTextField
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.material3.TextField
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.runtime.setValue
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.res.painterResource
|
||||||
|
import androidx.compose.ui.text.TextStyle
|
||||||
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.compose.ui.unit.sp
|
||||||
|
import androidx.navigation.NavController
|
||||||
|
import com.example.pmuapp.composeui.navigation.Screen
|
||||||
|
import com.example.pmuapp.models.user.model.AuthViewModel
|
||||||
|
import com.example.pmuapp.models.user.model.PetViewModel
|
||||||
|
import com.example.pmuapp.models.user.model.UserViewModel
|
||||||
|
|
||||||
|
@RequiresApi(VERSION_CODES.O)
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
|
@Composable
|
||||||
|
fun EditPet(navController: NavController ,authViewModel: AuthViewModel, petViewModel: PetViewModel, userViewModel: UserViewModel, petId: Int) {
|
||||||
|
val pet = (authViewModel.currentUser?.petId ?: emptyList()).find { it.id == petId }
|
||||||
|
|
||||||
|
var petName by remember { mutableStateOf(pet?.name ?: "") }
|
||||||
|
var petNotes by remember { mutableStateOf(pet?.notes ?: "") }
|
||||||
|
|
||||||
|
Column(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
.padding(10.dp),
|
||||||
|
horizontalAlignment = Alignment.CenterHorizontally
|
||||||
|
) {
|
||||||
|
// Отображение изображения (здесь предполагается, что у вас есть доступ к `availablePetImages` по индексу)
|
||||||
|
val imageResId = pet?.imageResId ?: 0
|
||||||
|
Image(
|
||||||
|
painter = painterResource(id = imageResId),
|
||||||
|
contentDescription = null,
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.height(200.dp)
|
||||||
|
)
|
||||||
|
|
||||||
|
// Поле ввода имени
|
||||||
|
OutlinedTextField(
|
||||||
|
value = petName,
|
||||||
|
onValueChange = { petName = it },
|
||||||
|
label = { Text("Имя питомца") },
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(top = 8.dp)
|
||||||
|
)
|
||||||
|
|
||||||
|
// Текст "Заметка о питомце"
|
||||||
|
Text(
|
||||||
|
text = "Заметка о питомце",
|
||||||
|
style = TextStyle(fontSize = 16.sp),
|
||||||
|
modifier = Modifier.padding(top = 8.dp)
|
||||||
|
)
|
||||||
|
|
||||||
|
// Поле ввода заметок
|
||||||
|
TextField(
|
||||||
|
value = petNotes,
|
||||||
|
onValueChange = { petNotes = it },
|
||||||
|
label = { Text("Заметки") },
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(top = 8.dp)
|
||||||
|
.heightIn(max = 200.dp) // Заметка будет растянута до конца экрана
|
||||||
|
.padding(16.dp),
|
||||||
|
readOnly = false // Сделаем его доступным для редактирования
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.weight(1f)) // Заполнитель для размещения кнопки внизу
|
||||||
|
|
||||||
|
// Кнопка "Изменить"
|
||||||
|
// Кнопка "Сохранить"
|
||||||
|
val editedPetId = Screen.PlayPet.route.replace("{id}", pet?.id.toString())
|
||||||
|
|
||||||
|
Button(
|
||||||
|
onClick = {
|
||||||
|
// Создаем обновленную версию питомца с введенными данными
|
||||||
|
val updatedPet = pet?.copy(name = petName, notes = petNotes) ?: return@Button
|
||||||
|
|
||||||
|
// Вызываем функцию для обновления питомца в вашей ViewModel (в данном случае, в petViewModel)
|
||||||
|
petViewModel.updatePet(updatedPet)
|
||||||
|
userViewModel.updatePetOnUser(authViewModel.currentUser?.id ?: -1, updatedPet)
|
||||||
|
authViewModel.currentUser=userViewModel.getUser(authViewModel.currentUser?.id ?: -1)
|
||||||
|
// Дополнительные действия после обновления, например, переход на другой экран
|
||||||
|
val petId = Screen.EditPet.route.replace("{id}", pet.id.toString())
|
||||||
|
navController?.navigate(editedPetId)
|
||||||
|
},
|
||||||
|
modifier = Modifier.padding(16.dp)
|
||||||
|
) {
|
||||||
|
Text("Сохранить")
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -1,39 +1,25 @@
|
|||||||
package com.example.pmuapp.composeui
|
package com.example.pmuapp.composeui
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import android.content.res.Configuration
|
|
||||||
import android.net.Uri
|
|
||||||
import android.provider.ContactsContract.Profile
|
|
||||||
import android.widget.TextView
|
|
||||||
import androidx.compose.foundation.clickable
|
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Spacer
|
import androidx.compose.foundation.layout.Spacer
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
|
||||||
import androidx.compose.foundation.layout.height
|
import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
|
||||||
import androidx.compose.material3.Button
|
import androidx.compose.material3.Button
|
||||||
import androidx.compose.material3.MaterialTheme
|
|
||||||
import androidx.compose.material3.Surface
|
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.platform.LocalContext
|
|
||||||
import androidx.compose.ui.res.stringResource
|
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.viewinterop.AndroidView
|
|
||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
import com.example.pmuapp.R
|
|
||||||
import com.example.pmuapp.composeui.navigation.Screen
|
import com.example.pmuapp.composeui.navigation.Screen
|
||||||
import com.example.pmuapp.models.user.composeui.PetList
|
import com.example.pmuapp.models.user.composeui.PetList
|
||||||
import com.example.pmuapp.models.user.model.AuthViewModel
|
import com.example.pmuapp.models.user.model.AuthViewModel
|
||||||
import com.example.pmuapp.ui.theme.PMUappTheme
|
import com.example.pmuapp.models.user.model.PetViewModel
|
||||||
|
import com.example.pmuapp.models.user.model.UserViewModel
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun Home(navController: NavController, authViewModel: AuthViewModel) {
|
fun Home(navController: NavController, authViewModel: AuthViewModel, petViewModel:PetViewModel, userViewModel:UserViewModel) {
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier.fillMaxSize(),
|
modifier = Modifier.fillMaxSize(),
|
||||||
verticalArrangement = Arrangement.Center,
|
verticalArrangement = Arrangement.Center,
|
||||||
@ -51,7 +37,7 @@ fun Home(navController: NavController, authViewModel: AuthViewModel) {
|
|||||||
Spacer(modifier = Modifier.height(16.dp))
|
Spacer(modifier = Modifier.height(16.dp))
|
||||||
|
|
||||||
// Вывод списка питомцев
|
// Вывод списка питомцев
|
||||||
PetList(navController, authViewModel)
|
PetList(navController,authViewModel, petViewModel, userViewModel, authViewModel.currentUser?.id ?: -1)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
96
app/src/main/java/com/example/pmuapp/composeui/PlayPet.kt
Normal file
96
app/src/main/java/com/example/pmuapp/composeui/PlayPet.kt
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
package com.example.pmuapp.composeui
|
||||||
|
|
||||||
|
import android.os.Build
|
||||||
|
import androidx.annotation.RequiresApi
|
||||||
|
import androidx.compose.foundation.Image
|
||||||
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.layout.Spacer
|
||||||
|
import androidx.compose.foundation.layout.fillMaxHeight
|
||||||
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.foundation.layout.height
|
||||||
|
import androidx.compose.foundation.layout.heightIn
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.material3.Button
|
||||||
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.material3.TextField
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.res.painterResource
|
||||||
|
import androidx.compose.ui.text.TextStyle
|
||||||
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.compose.ui.unit.sp
|
||||||
|
import androidx.navigation.NavController
|
||||||
|
import com.example.pmuapp.composeui.navigation.Screen
|
||||||
|
import com.example.pmuapp.models.user.model.AuthViewModel
|
||||||
|
import com.example.pmuapp.models.user.model.PetViewModel
|
||||||
|
import com.example.pmuapp.models.user.model.UserViewModel
|
||||||
|
|
||||||
|
@RequiresApi(Build.VERSION_CODES.O)
|
||||||
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
|
@Composable
|
||||||
|
fun PlayPet(navController: NavController,authViewModel: AuthViewModel, petViewModel: PetViewModel, userViewModel: UserViewModel, petId: Int) {
|
||||||
|
val pet = (authViewModel.currentUser?.petId ?: emptyList()).find { it.id == petId }
|
||||||
|
|
||||||
|
Column(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
.padding(10.dp),
|
||||||
|
horizontalAlignment = Alignment.CenterHorizontally
|
||||||
|
) {
|
||||||
|
// Отображение изображения (здесь предполагается, что у вас есть доступ к `availablePetImages` по индексу)
|
||||||
|
val imageResId = pet?.imageResId ?: 0
|
||||||
|
Image(
|
||||||
|
painter = painterResource(id = imageResId),
|
||||||
|
contentDescription = null,
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.height(200.dp)
|
||||||
|
)
|
||||||
|
|
||||||
|
// Отображение имени
|
||||||
|
Text(
|
||||||
|
text = pet?.name ?: "",
|
||||||
|
style = TextStyle(fontWeight = FontWeight.Bold, fontSize = 24.sp),
|
||||||
|
modifier = Modifier.padding(top = 8.dp)
|
||||||
|
)
|
||||||
|
|
||||||
|
// Текст "Заметка о питомце"
|
||||||
|
Text(
|
||||||
|
text = "Заметка о питомце",
|
||||||
|
style = TextStyle(fontSize = 16.sp),
|
||||||
|
modifier = Modifier.padding(top = 8.dp)
|
||||||
|
)
|
||||||
|
|
||||||
|
// Отображение заметок
|
||||||
|
TextField(
|
||||||
|
value = pet?.notes ?: "",
|
||||||
|
onValueChange = { /* Обработка изменения текста, если необходимо */ },
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(top = 8.dp)
|
||||||
|
.heightIn(max = 200.dp) // Заметка будет растянута до конца экрана
|
||||||
|
.padding(16.dp),
|
||||||
|
readOnly = true
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.weight(1f)) // Заполнитель для размещения кнопки внизу
|
||||||
|
val petId = Screen.EditPet.route.replace("{id}", pet?.id.toString())
|
||||||
|
// Кнопка "Изменить"
|
||||||
|
Button(
|
||||||
|
|
||||||
|
onClick = {
|
||||||
|
// Перейти на страницу "играть" с передачей petId как аргумент
|
||||||
|
navController?.navigate(petId)
|
||||||
|
|
||||||
|
// Обработка нажатия кнопки "Изменить"
|
||||||
|
},
|
||||||
|
modifier = Modifier.padding(16.dp)
|
||||||
|
) {
|
||||||
|
Text("Изменить")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,36 +1,26 @@
|
|||||||
package com.example.pmuapp.composeui
|
package com.example.pmuapp.composeui
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Intent
|
|
||||||
import android.content.res.Configuration
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.provider.ContactsContract.Profile
|
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||||
import android.widget.TextView
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Spacer
|
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.foundation.layout.height
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.material3.Button
|
import androidx.compose.material3.Button
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.MaterialTheme
|
|
||||||
import androidx.compose.material3.Surface
|
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.material3.TextField
|
import androidx.compose.material3.TextField
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.platform.LocalContext
|
|
||||||
import androidx.compose.ui.res.stringResource
|
|
||||||
import androidx.compose.ui.text.input.PasswordVisualTransformation
|
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.viewinterop.AndroidView
|
import coil.compose.rememberImagePainter
|
||||||
import com.example.pmuapp.R
|
|
||||||
import com.example.pmuapp.models.user.model.User
|
import com.example.pmuapp.models.user.model.User
|
||||||
import com.example.pmuapp.ui.theme.PMUappTheme
|
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@SuppressLint("RememberReturnType")
|
@SuppressLint("RememberReturnType")
|
||||||
@ -45,6 +35,38 @@ fun Profile(currentUser: User?, onSaveClick: (User) -> Unit) {
|
|||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
.padding(16.dp)
|
.padding(16.dp)
|
||||||
) {
|
) {
|
||||||
|
currentUser?.let { user ->
|
||||||
|
Image(
|
||||||
|
painter = rememberImagePainter(data = user.imageResId),
|
||||||
|
contentDescription = null,
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.height(200.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// State to hold the selected image URI
|
||||||
|
val selectedImageUri = remember { mutableStateOf<Uri?>(null) }
|
||||||
|
|
||||||
|
// Create an ActivityResultLauncher to handle image selection
|
||||||
|
val imagePickerLauncher = rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) { result: Uri? ->
|
||||||
|
result?.let { uri ->
|
||||||
|
selectedImageUri.value = uri
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Button to open the image picker
|
||||||
|
Button(
|
||||||
|
onClick = {
|
||||||
|
// Request permission to access the device's storage
|
||||||
|
// Open the image picker
|
||||||
|
imagePickerLauncher.launch("image/*")
|
||||||
|
},
|
||||||
|
modifier = Modifier.fillMaxWidth()
|
||||||
|
) {
|
||||||
|
Text("Загрузить фото")
|
||||||
|
}
|
||||||
|
|
||||||
TextField(
|
TextField(
|
||||||
value = nameState.value,
|
value = nameState.value,
|
||||||
onValueChange = { nameState.value = it },
|
onValueChange = { nameState.value = it },
|
||||||
@ -67,7 +89,6 @@ fun Profile(currentUser: User?, onSaveClick: (User) -> Unit) {
|
|||||||
value = passwordState.value,
|
value = passwordState.value,
|
||||||
onValueChange = { passwordState.value = it },
|
onValueChange = { passwordState.value = it },
|
||||||
label = { Text("Password") },
|
label = { Text("Password") },
|
||||||
visualTransformation = PasswordVisualTransformation(),
|
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(bottom = 16.dp)
|
.padding(bottom = 16.dp)
|
||||||
@ -80,7 +101,8 @@ fun Profile(currentUser: User?, onSaveClick: (User) -> Unit) {
|
|||||||
nameState.value,
|
nameState.value,
|
||||||
loginState.value,
|
loginState.value,
|
||||||
passwordState.value,
|
passwordState.value,
|
||||||
currentUser?.petId ?: emptyList()
|
currentUser?.petId ?: emptyList(),
|
||||||
|
selectedImageUri.value?.toString() ?: "", // Use the selected image URI
|
||||||
)
|
)
|
||||||
onSaveClick(updatedUser) // Вызывает функцию updateUser в UserViewModel
|
onSaveClick(updatedUser) // Вызывает функцию updateUser в UserViewModel
|
||||||
},
|
},
|
||||||
@ -88,7 +110,5 @@ fun Profile(currentUser: User?, onSaveClick: (User) -> Unit) {
|
|||||||
) {
|
) {
|
||||||
Text("Сохранить")
|
Text("Сохранить")
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,11 @@ package com.example.pmuapp.composeui.navigation
|
|||||||
|
|
||||||
import CreatePet
|
import CreatePet
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
|
import android.os.Build
|
||||||
|
import androidx.annotation.RequiresApi
|
||||||
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.PaddingValues
|
import androidx.compose.foundation.layout.PaddingValues
|
||||||
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.filled.ArrowBack
|
import androidx.compose.material.icons.filled.ArrowBack
|
||||||
@ -20,6 +24,7 @@ import androidx.compose.material3.TopAppBarDefaults
|
|||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
@ -34,13 +39,15 @@ import androidx.navigation.compose.currentBackStackEntryAsState
|
|||||||
import androidx.navigation.compose.rememberNavController
|
import androidx.navigation.compose.rememberNavController
|
||||||
import androidx.navigation.navArgument
|
import androidx.navigation.navArgument
|
||||||
import com.example.pmuapp.R
|
import com.example.pmuapp.R
|
||||||
|
import com.example.pmuapp.composeui.EditPet
|
||||||
import com.example.pmuapp.composeui.Home
|
import com.example.pmuapp.composeui.Home
|
||||||
import com.example.pmuapp.composeui.Login
|
import com.example.pmuapp.composeui.Login
|
||||||
|
import com.example.pmuapp.composeui.PlayPet
|
||||||
import com.example.pmuapp.composeui.Profile
|
import com.example.pmuapp.composeui.Profile
|
||||||
import com.example.pmuapp.models.user.composeui.StudentView
|
import com.example.pmuapp.models.user.composeui.PetList
|
||||||
import com.example.pmuapp.models.user.composeui.UserList
|
import com.example.pmuapp.models.user.composeui.UserList
|
||||||
import com.example.pmuapp.models.user.model.AuthViewModel
|
import com.example.pmuapp.models.user.model.AuthViewModel
|
||||||
import com.example.pmuapp.models.user.model.User
|
import com.example.pmuapp.models.user.model.PetViewModel
|
||||||
import com.example.pmuapp.models.user.model.UserViewModel
|
import com.example.pmuapp.models.user.model.UserViewModel
|
||||||
import com.example.pmuapp.ui.theme.PMUappTheme
|
import com.example.pmuapp.ui.theme.PMUappTheme
|
||||||
|
|
||||||
@ -59,14 +66,27 @@ fun Topbar(
|
|||||||
Text(stringResource(currentScreen?.resourceId ?: R.string.app_name))
|
Text(stringResource(currentScreen?.resourceId ?: R.string.app_name))
|
||||||
},
|
},
|
||||||
navigationIcon = {
|
navigationIcon = {
|
||||||
if (
|
if (currentScreen == Screen.PlayPet) {
|
||||||
|
IconButton(
|
||||||
|
onClick = {
|
||||||
|
// Перейти на главный экран
|
||||||
|
navController.navigate(Screen.Home.route)
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Default.ArrowBack,
|
||||||
|
contentDescription = "Back",
|
||||||
|
tint = MaterialTheme.colorScheme.onPrimary
|
||||||
|
)
|
||||||
|
}
|
||||||
|
} else if (
|
||||||
navController.previousBackStackEntry != null
|
navController.previousBackStackEntry != null
|
||||||
&& (currentScreen == null || !currentScreen.showInBottomBar)
|
&& (currentScreen == null || !currentScreen.showInBottomBar)
|
||||||
) {
|
) {
|
||||||
IconButton(onClick = { navController.navigateUp() }) {
|
IconButton(onClick = { navController.navigateUp() }) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Filled.ArrowBack,
|
imageVector = Icons.Default.ArrowBack,
|
||||||
contentDescription = null,
|
contentDescription = "Back",
|
||||||
tint = MaterialTheme.colorScheme.onPrimary
|
tint = MaterialTheme.colorScheme.onPrimary
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -101,12 +121,14 @@ fun Navbar(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@RequiresApi(Build.VERSION_CODES.O)
|
||||||
@Composable
|
@Composable
|
||||||
fun NavHost(
|
fun NavHost(
|
||||||
navController: NavHostController,
|
navController: NavHostController,
|
||||||
innerPadding: PaddingValues,
|
innerPadding: PaddingValues,
|
||||||
authViewModel: AuthViewModel, // Передайте AuthViewModel как параметр
|
authViewModel: AuthViewModel, // Передайте AuthViewModel как параметр
|
||||||
userViewModel: UserViewModel // Передайте UserViewModel как параметр
|
userViewModel: UserViewModel,
|
||||||
|
petViewModel: PetViewModel// Передайте UserViewModel как параметр
|
||||||
) {
|
) {
|
||||||
NavHost(
|
NavHost(
|
||||||
navController = navController,
|
navController = navController,
|
||||||
@ -124,6 +146,7 @@ userViewModel: UserViewModel // Передайте UserViewModel как пара
|
|||||||
onSaveClick = { updatedUser ->
|
onSaveClick = { updatedUser ->
|
||||||
userViewModel.updateUser(updatedUser)
|
userViewModel.updateUser(updatedUser)
|
||||||
authViewModel.currentUser = updatedUser
|
authViewModel.currentUser = updatedUser
|
||||||
|
navController.navigate(Screen.Profile.route)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
@ -132,11 +155,12 @@ userViewModel: UserViewModel // Передайте UserViewModel как пара
|
|||||||
}
|
}
|
||||||
|
|
||||||
composable(Screen.UserList.route) { UserList(navController, userViewModel) }
|
composable(Screen.UserList.route) { UserList(navController, userViewModel) }
|
||||||
composable(Screen.Home.route) { Home(navController, authViewModel) }
|
composable(Screen.Home.route) { Home(navController, authViewModel,petViewModel,userViewModel) }
|
||||||
composable(Screen.CreatePet.route) {
|
composable(Screen.CreatePet.route) {
|
||||||
val currentUser = authViewModel.currentUser ?: userViewModel.getUsers().firstOrNull()
|
val currentUser = authViewModel.currentUser ?: userViewModel.getUsers().firstOrNull()
|
||||||
CreatePet ( onSaveClick = { newPet ->
|
CreatePet ( navController, onSaveClick = { newPet ->
|
||||||
userViewModel.addPetToUser(currentUser?.id ?:0, newPet)
|
var adedPet = petViewModel.createPet(newPet)
|
||||||
|
userViewModel.addPetToUser(currentUser?.id ?:0, adedPet)
|
||||||
authViewModel.currentUser = userViewModel.getUser(currentUser?.id ?:0)
|
authViewModel.currentUser = userViewModel.getUser(currentUser?.id ?:0)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@ -147,8 +171,32 @@ userViewModel: UserViewModel // Передайте UserViewModel как пара
|
|||||||
Screen.UserView.route,
|
Screen.UserView.route,
|
||||||
arguments = listOf(navArgument("id") { type = NavType.IntType })
|
arguments = listOf(navArgument("id") { type = NavType.IntType })
|
||||||
) { backStackEntry ->
|
) { backStackEntry ->
|
||||||
backStackEntry.arguments?.let { StudentView(userViewModel.getUsers()[it.getInt("id")]) }
|
val userId = backStackEntry.arguments?.getInt("id") ?: -1
|
||||||
|
|
||||||
|
Box(
|
||||||
|
contentAlignment = Alignment.TopCenter, // Центрировать содержимое по горизонтали и сверху
|
||||||
|
modifier = Modifier.fillMaxSize()
|
||||||
|
) {
|
||||||
|
PetList(navController,authViewModel, petViewModel, userViewModel, userId)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
composable(
|
||||||
|
Screen.PlayPet.route,
|
||||||
|
arguments = listOf(navArgument("id") { type = NavType.IntType })
|
||||||
|
) { backStackEntry ->
|
||||||
|
val petId = backStackEntry.arguments?.getInt("id") ?: -1
|
||||||
|
|
||||||
|
PlayPet(navController,authViewModel, petViewModel, userViewModel, petId)
|
||||||
|
}
|
||||||
|
composable(
|
||||||
|
Screen.EditPet.route,
|
||||||
|
arguments = listOf(navArgument("id") { type = NavType.IntType })
|
||||||
|
) { backStackEntry ->
|
||||||
|
val petId = backStackEntry.arguments?.getInt("id") ?: -1
|
||||||
|
EditPet(navController,authViewModel, petViewModel, userViewModel, petId)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,6 +206,7 @@ fun MainNavbar() {
|
|||||||
val navController = rememberNavController()
|
val navController = rememberNavController()
|
||||||
val authViewModel = remember { AuthViewModel() }
|
val authViewModel = remember { AuthViewModel() }
|
||||||
val userViewModel =remember {UserViewModel() }// Создайте экземпляр AuthViewModel
|
val userViewModel =remember {UserViewModel() }// Создайте экземпляр AuthViewModel
|
||||||
|
val petViewModel = remember {PetViewModel()}
|
||||||
val navBackStackEntry by navController.currentBackStackEntryAsState()
|
val navBackStackEntry by navController.currentBackStackEntryAsState()
|
||||||
val currentDestination = navBackStackEntry?.destination
|
val currentDestination = navBackStackEntry?.destination
|
||||||
val currentScreen = currentDestination?.route?.let { Screen.getItem(it) }
|
val currentScreen = currentDestination?.route?.let { Screen.getItem(it) }
|
||||||
@ -172,7 +221,7 @@ fun MainNavbar() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
) { innerPadding ->
|
) { innerPadding ->
|
||||||
NavHost(navController, innerPadding, authViewModel, userViewModel)
|
NavHost(navController, innerPadding, authViewModel, userViewModel, petViewModel )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,15 +27,22 @@ enum class Screen(
|
|||||||
"profile", R.string.user_my_title, Icons.Filled.Person
|
"profile", R.string.user_my_title, Icons.Filled.Person
|
||||||
),
|
),
|
||||||
UserView(
|
UserView(
|
||||||
"student-view/{id}", R.string.user_view_title, showInBottomBar = false
|
"user-view/{id}", R.string.user_view_title, showInBottomBar = false
|
||||||
),
|
),
|
||||||
Login(
|
Login(
|
||||||
"login", R.string.login_title, showInBottomBar = false
|
"login", R.string.login_title, showInBottomBar = false
|
||||||
),
|
),
|
||||||
CreatePet(
|
CreatePet(
|
||||||
"createpet", R.string.create_pet_title, showInBottomBar = false
|
"createpet", R.string.create_pet_title, showInBottomBar = false
|
||||||
|
),
|
||||||
|
PlayPet(
|
||||||
|
"playpet/{id}", R.string.play_pet_title,showInBottomBar = false
|
||||||
|
),
|
||||||
|
EditPet(
|
||||||
|
"editpet/{id}", R.string.edit_pet_title,showInBottomBar = false
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val bottomBarItems = listOf(
|
val bottomBarItems = listOf(
|
||||||
UserList,
|
UserList,
|
||||||
|
@ -1,55 +1,72 @@
|
|||||||
package com.example.pmuapp.models.user.composeui
|
package com.example.pmuapp.models.user.composeui
|
||||||
|
|
||||||
import android.content.res.Configuration
|
|
||||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Box
|
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.ExperimentalLayoutApi
|
import androidx.compose.foundation.layout.ExperimentalLayoutApi
|
||||||
import androidx.compose.foundation.layout.FlowRow
|
import androidx.compose.foundation.layout.FlowRow
|
||||||
import androidx.compose.foundation.layout.PaddingValues
|
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.size
|
import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.LazyRow
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.foundation.lazy.items
|
import androidx.compose.material.icons.filled.Delete
|
||||||
import androidx.compose.material3.Button
|
import androidx.compose.material3.Button
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material3.Surface
|
import androidx.compose.material3.IconButton
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.rememberUpdatedState
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.text.TextStyle
|
||||||
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.compose.ui.unit.sp
|
||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
import com.example.pmuapp.composeui.navigation.Screen
|
import com.example.pmuapp.composeui.navigation.Screen
|
||||||
import com.example.pmuapp.models.user.model.AuthViewModel
|
import com.example.pmuapp.models.user.model.AuthViewModel
|
||||||
|
import com.example.pmuapp.models.user.model.PetViewModel
|
||||||
import com.example.pmuapp.models.user.model.User
|
import com.example.pmuapp.models.user.model.User
|
||||||
import com.example.pmuapp.models.user.model.UserViewModel
|
import com.example.pmuapp.models.user.model.UserViewModel
|
||||||
import com.example.pmuapp.ui.theme.PMUappTheme
|
|
||||||
@OptIn(ExperimentalFoundationApi::class, ExperimentalLayoutApi::class)
|
@OptIn(ExperimentalFoundationApi::class, ExperimentalLayoutApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun PetList(navController: NavController?, authViewModel: AuthViewModel) {
|
fun PetList(navController: NavController, authViewModel: AuthViewModel, petViewModel: PetViewModel, userViewModel: UserViewModel, userId: Int) {
|
||||||
val currentUser = authViewModel.currentUser
|
|
||||||
val pets = currentUser?.petId.orEmpty()
|
val currentUser = userViewModel.getUser(userId)
|
||||||
|
var pets = currentUser.petId
|
||||||
|
|
||||||
|
LazyColumn(
|
||||||
|
verticalArrangement = Arrangement.Center, // Центрировать элементы по вертикали
|
||||||
|
horizontalAlignment = Alignment.CenterHorizontally // Центрировать элементы по горизонтали
|
||||||
|
) {
|
||||||
|
if (userId != authViewModel.currentUser?.id ?: -1) {
|
||||||
|
item {
|
||||||
|
// Добавляем большой текст с именем пользователя
|
||||||
|
Text(
|
||||||
|
text = currentUser?.name + " (" + currentUser.login + ")",
|
||||||
|
style = TextStyle(
|
||||||
|
fontSize = 24.sp,
|
||||||
|
fontWeight = FontWeight.Bold
|
||||||
|
),
|
||||||
|
modifier = Modifier.padding(16.dp)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
LazyColumn {
|
|
||||||
item {
|
item {
|
||||||
FlowRow(
|
FlowRow() {
|
||||||
) {
|
|
||||||
pets.forEach { pet ->
|
pets.forEach { pet ->
|
||||||
val imageId = pet.imageResId
|
val imageId = pet.imageResId
|
||||||
val petName = pet.name
|
val petName = pet.name
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
horizontalAlignment = Alignment.CenterHorizontally,
|
horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
modifier = Modifier
|
modifier = Modifier.padding(8.dp)
|
||||||
.padding(8.dp)
|
|
||||||
) {
|
) {
|
||||||
Image(
|
Image(
|
||||||
painter = painterResource(id = imageId),
|
painter = painterResource(id = imageId),
|
||||||
@ -61,6 +78,43 @@ fun PetList(navController: NavController?, authViewModel: AuthViewModel) {
|
|||||||
text = petName,
|
text = petName,
|
||||||
modifier = Modifier.padding(top = 4.dp)
|
modifier = Modifier.padding(top = 4.dp)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (userId == authViewModel.currentUser?.id ?: -1) {
|
||||||
|
val petId = Screen.PlayPet.route.replace("{id}", pet.id.toString())
|
||||||
|
Button(
|
||||||
|
onClick = {
|
||||||
|
// Перейти на страницу "играть" с передачей petId как аргумент
|
||||||
|
navController?.navigate(petId)
|
||||||
|
|
||||||
|
},
|
||||||
|
// modifier = Modifier.fillMaxWidth()
|
||||||
|
) {
|
||||||
|
Text("Играть")
|
||||||
|
}
|
||||||
|
// Кнопка удаления питомца
|
||||||
|
IconButton(
|
||||||
|
onClick = {
|
||||||
|
// Вызывает функцию удаления питомца из PetViewModel
|
||||||
|
petViewModel.deletePet(pet)
|
||||||
|
userViewModel.deletePet(
|
||||||
|
currentUser?.id
|
||||||
|
?: 0,
|
||||||
|
pet.id
|
||||||
|
)
|
||||||
|
authViewModel.currentUser =
|
||||||
|
userViewModel.getUser(
|
||||||
|
currentUser?.id
|
||||||
|
?: 0
|
||||||
|
)
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Default.Delete,
|
||||||
|
contentDescription = "Удалить"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,13 +4,65 @@ import android.media.Image
|
|||||||
import androidx.compose.runtime.MutableState
|
import androidx.compose.runtime.MutableState
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
|
import com.example.pmuapp.R
|
||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
|
|
||||||
data class Pet(
|
data class Pet(
|
||||||
val id: Int,
|
var id: Int,
|
||||||
val name: String,
|
val name: String,
|
||||||
val imageResId: Int
|
val imageResId: Int,
|
||||||
|
val notes: String
|
||||||
) : Serializable
|
) : Serializable
|
||||||
|
|
||||||
|
class PetViewModel : ViewModel() {
|
||||||
|
var pets: MutableState<List<Pet>> = mutableStateOf(
|
||||||
|
emptyList()
|
||||||
|
)
|
||||||
|
val availablePetImages: List<Int> = listOf(
|
||||||
|
R.drawable.pet1,
|
||||||
|
R.drawable.pet2,
|
||||||
|
R.drawable.pet3,
|
||||||
|
R.drawable.pet4,
|
||||||
|
R.drawable.pet5,
|
||||||
|
R.drawable.pet6,
|
||||||
|
R.drawable.pet7,
|
||||||
|
R.drawable.pet8,
|
||||||
|
)
|
||||||
|
|
||||||
|
fun createPet(newPet: Pet): Pet {
|
||||||
|
newPet.id = pets.value.size.toInt()
|
||||||
|
val updatedPets = pets.value.toMutableList()
|
||||||
|
updatedPets.add(newPet)
|
||||||
|
pets.value = updatedPets
|
||||||
|
return newPet
|
||||||
|
}
|
||||||
|
|
||||||
|
fun deletePet(pet: Pet) {
|
||||||
|
val updatedPets = pets.value.toMutableList()
|
||||||
|
updatedPets.remove(pet)
|
||||||
|
pets.value = updatedPets
|
||||||
|
}
|
||||||
|
|
||||||
|
fun updatePet(updatedPet: Pet) {
|
||||||
|
val updatedPets = pets.value.toMutableList()
|
||||||
|
val index = updatedPets.indexOfFirst { it.id == updatedPet.id }
|
||||||
|
|
||||||
|
if (index != -1) {
|
||||||
|
updatedPets[index] = updatedPet
|
||||||
|
pets.value = updatedPets
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// fun updateUser(updatedUser: User) {
|
||||||
|
// val updatedUsers = users.value.toMutableList()
|
||||||
|
// val index = updatedUsers.indexOfFirst { it.login == updatedUser.login }
|
||||||
|
// if (index != -1) {
|
||||||
|
// updatedUsers[index] = updatedUser
|
||||||
|
// users.value = updatedUsers
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.example.pmuapp.models.user.model
|
package com.example.pmuapp.models.user.model
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
import androidx.compose.runtime.MutableState
|
import androidx.compose.runtime.MutableState
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
@ -11,15 +12,19 @@ data class User(
|
|||||||
val name: String,
|
val name: String,
|
||||||
val login: String,
|
val login: String,
|
||||||
val password: String,
|
val password: String,
|
||||||
val petId: List<Pet>
|
val petId: List<Pet>,
|
||||||
|
val imageResId: String // Добавляем поле для хранения ID ресурса изображения пользователя
|
||||||
) : Serializable
|
) : Serializable
|
||||||
|
|
||||||
|
|
||||||
class UserViewModel : ViewModel() {
|
class UserViewModel : ViewModel() {
|
||||||
|
val imageUri: Uri = Uri.parse("android.resource://com.example.pmuapp/${R.drawable.avatar}")
|
||||||
|
|
||||||
var users: MutableState<List<User>> = mutableStateOf(
|
var users: MutableState<List<User>> = mutableStateOf(
|
||||||
listOf(
|
listOf(
|
||||||
User(0,"Иван", "ivan", "111111", emptyList()),
|
User(0,"Иван", "ivan", "111111", emptyList(),imageUri.toString()),
|
||||||
User(1,"Анна", "ann", "111111", emptyList()),
|
User(1,"Анна", "ann", "111111", emptyList(),imageUri.toString()),
|
||||||
User(2,"Лиза", "liza", "111111",emptyList())
|
User(2,"Лиза", "liza", "111111",emptyList(),imageUri.toString())
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
val availablePetImages: List<Int> = listOf(
|
val availablePetImages: List<Int> = listOf(
|
||||||
@ -56,6 +61,58 @@ class UserViewModel : ViewModel() {
|
|||||||
users.value = updatedUsers
|
users.value = updatedUsers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
fun deletePet(userId: Int, petIdToDelete: Int) {
|
||||||
|
val updatedUsers = users.value.toMutableList()
|
||||||
|
|
||||||
|
// Найдем пользователя по userId
|
||||||
|
val user = updatedUsers.find { it.id == userId }
|
||||||
|
|
||||||
|
user?.let { user ->
|
||||||
|
val updatedPets = user.petId.toMutableList()
|
||||||
|
|
||||||
|
// Найдем питомца по petId и удалим его из списка питомцев
|
||||||
|
val petToDelete = updatedPets.find { it.id == petIdToDelete }
|
||||||
|
|
||||||
|
petToDelete?.let { pet ->
|
||||||
|
updatedPets.remove(pet)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Обновим пользователя с обновленным списком питомцев
|
||||||
|
val updatedUser = user.copy(petId = updatedPets)
|
||||||
|
|
||||||
|
// Обновим список пользователей
|
||||||
|
val userIndex = updatedUsers.indexOf(user)
|
||||||
|
updatedUsers[userIndex] = updatedUser
|
||||||
|
users.value = updatedUsers
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun updatePetOnUser(userId: Int, updatedPet: Pet) {
|
||||||
|
val updatedUsers = users.value.toMutableList()
|
||||||
|
|
||||||
|
// Найдем пользователя по userId
|
||||||
|
val user = updatedUsers.find { it.id == userId }
|
||||||
|
|
||||||
|
user?.let { user ->
|
||||||
|
val updatedPets = user.petId.toMutableList()
|
||||||
|
|
||||||
|
// Найдем питомца по petId и обновим его
|
||||||
|
val petToUpdate = updatedPets.find { it.id == updatedPet.id }
|
||||||
|
|
||||||
|
petToUpdate?.let { pet ->
|
||||||
|
val petIndex = updatedPets.indexOf(pet)
|
||||||
|
updatedPets[petIndex] = updatedPet
|
||||||
|
}
|
||||||
|
|
||||||
|
// Обновим пользователя с обновленным списком питомцев
|
||||||
|
val updatedUser = user.copy(petId = updatedPets)
|
||||||
|
|
||||||
|
// Обновим список пользователей
|
||||||
|
val userIndex = updatedUsers.indexOf(user)
|
||||||
|
updatedUsers[userIndex] = updatedUser
|
||||||
|
users.value = updatedUsers
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fun updateUser(updatedUser: User) {
|
fun updateUser(updatedUser: User) {
|
||||||
val updatedUsers = users.value.toMutableList()
|
val updatedUsers = users.value.toMutableList()
|
||||||
|
BIN
app/src/main/res/drawable/avatar.jpg
Normal file
BIN
app/src/main/res/drawable/avatar.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.4 KiB |
@ -9,12 +9,16 @@
|
|||||||
<string name="user_my_title">Мой профиль</string>
|
<string name="user_my_title">Мой профиль</string>
|
||||||
<string name="login_title">Авторизация</string>
|
<string name="login_title">Авторизация</string>
|
||||||
<string name="create_pet_title">Создание питомца</string>
|
<string name="create_pet_title">Создание питомца</string>
|
||||||
|
<string name="pet_notes">Заметка питомца</string>
|
||||||
|
<string name="play_pet_title">Мой питомец</string>
|
||||||
|
<string name="edit_pet_title">Изменение питомца</string>
|
||||||
<string name="about_text">
|
<string name="about_text">
|
||||||
<p>Это текст <b>о нас</b>!</p>\n\n
|
<p>Это текст <b>о нас</b>!</p>\n\n
|
||||||
<p>Здесь могла быть Ваша реклама!</p>\n\n
|
<p>Здесь могла быть Ваша реклама!</p>\n\n
|
||||||
<p>Наш сайт <a href="https://ulstu.ru">ulstu.ru</a></p>
|
<p>Наш сайт <a href="https://ulstu.ru">ulstu.ru</a></p>
|
||||||
</string>
|
</string>
|
||||||
<string-array name="available_pet_images">
|
<string-array name="available_pet_images">
|
||||||
|
<item>@drawable/avatar</item>
|
||||||
<item>@drawable/pet1</item>
|
<item>@drawable/pet1</item>
|
||||||
<item>@drawable/pet2</item>
|
<item>@drawable/pet2</item>
|
||||||
<item>@drawable/pet3</item>
|
<item>@drawable/pet3</item>
|
||||||
|
BIN
report/~$Lab1.docx
Normal file
BIN
report/~$Lab1.docx
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user