diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 3dbbbf2..291a0e9 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -45,6 +45,7 @@ dependencies {
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)
+ implementation(libs.androidx.runtime)
implementation(libs.material)
implementation(libs.androidx.activity)
implementation(libs.androidx.constraintlayout)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 111c250..631407c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -31,6 +31,22 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/kr/ac/anu/mumu/data/datasource/MyService.kt b/app/src/main/java/kr/ac/anu/mumu/data/datasource/MyService.kt
new file mode 100644
index 0000000..2ea80b2
--- /dev/null
+++ b/app/src/main/java/kr/ac/anu/mumu/data/datasource/MyService.kt
@@ -0,0 +1,10 @@
+package kr.ac.anu.mumu.data.datasource
+
+import kr.ac.anu.mumu.data.model.MyResponse
+import retrofit2.http.GET
+import retrofit2.http.Path
+
+interface MyService {
+ @GET("/api/users/profile/{id}")
+ suspend fun getUserProfile(@Path("id") userId: Int): MyResponse
+}
\ No newline at end of file
diff --git a/app/src/main/java/kr/ac/anu/mumu/data/model/MyDto.kt b/app/src/main/java/kr/ac/anu/mumu/data/model/MyDto.kt
new file mode 100644
index 0000000..6efa1cf
--- /dev/null
+++ b/app/src/main/java/kr/ac/anu/mumu/data/model/MyDto.kt
@@ -0,0 +1,18 @@
+package kr.ac.anu.mumu.data.model
+
+import com.google.gson.annotations.SerializedName
+
+data class MyResponse(
+ val success: Boolean,
+ val message: String,
+ val user: MyDto
+)
+
+data class MyDto(
+ @SerializedName("user_id")
+ val userId: Int,
+ @SerializedName("login_id")
+ val loginId: String,
+ val name: String,
+ val phone: String
+)
\ No newline at end of file
diff --git a/app/src/main/java/kr/ac/anu/mumu/data/repository/MyRepositoryImpl.kt b/app/src/main/java/kr/ac/anu/mumu/data/repository/MyRepositoryImpl.kt
new file mode 100644
index 0000000..da6551b
--- /dev/null
+++ b/app/src/main/java/kr/ac/anu/mumu/data/repository/MyRepositoryImpl.kt
@@ -0,0 +1,28 @@
+package kr.ac.anu.mumu.data.repository
+
+import kr.ac.anu.mumu.data.datasource.MyService
+import kr.ac.anu.mumu.domain.model.MyInformation
+import kr.ac.anu.mumu.domain.repository.MyRepository
+import javax.inject.Inject
+
+class MyRepositoryImpl @Inject constructor(
+ private val myService: MyService
+) : MyRepository {
+
+ override suspend fun getUserProfile(userId: Int): Result {
+ return try {
+ val response = myService.getUserProfile(userId)
+
+ val myInfo = MyInformation(
+ id = response.user.loginId,
+ name = response.user.name,
+ phone = response.user.phone
+ )
+
+ Result.success(myInfo)
+
+ } catch (e: Exception) {
+ Result.failure(e)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/kr/ac/anu/mumu/di/NetworkModule.kt b/app/src/main/java/kr/ac/anu/mumu/di/NetworkModule.kt
index 8c979fb..fb2c9c7 100644
--- a/app/src/main/java/kr/ac/anu/mumu/di/NetworkModule.kt
+++ b/app/src/main/java/kr/ac/anu/mumu/di/NetworkModule.kt
@@ -6,6 +6,7 @@ import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import kr.ac.anu.mumu.data.datasource.AuthService
import kr.ac.anu.mumu.data.datasource.JoinService
+import kr.ac.anu.mumu.data.datasource.MyService
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import javax.inject.Singleton
@@ -33,4 +34,10 @@ object NetworkModule {
fun provideJoinService(retrofit: Retrofit): JoinService {
return retrofit.create(JoinService::class.java)
}
+
+ @Provides
+ @Singleton
+ fun provideMyService(retrofit: Retrofit): MyService {
+ return retrofit.create(MyService::class.java)
+ }
}
diff --git a/app/src/main/java/kr/ac/anu/mumu/di/RepositoryModule.kt b/app/src/main/java/kr/ac/anu/mumu/di/RepositoryModule.kt
index 8591104..326a1f9 100644
--- a/app/src/main/java/kr/ac/anu/mumu/di/RepositoryModule.kt
+++ b/app/src/main/java/kr/ac/anu/mumu/di/RepositoryModule.kt
@@ -6,8 +6,10 @@ import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import kr.ac.anu.mumu.data.repository.JoinRepositoryImpl
import kr.ac.anu.mumu.data.repository.LoginRepositoryImpl
+import kr.ac.anu.mumu.data.repository.MyRepositoryImpl
import kr.ac.anu.mumu.domain.repository.JoinRepository
import kr.ac.anu.mumu.domain.repository.LoginRepository
+import kr.ac.anu.mumu.domain.repository.MyRepository
import javax.inject.Singleton
@Module
@@ -24,4 +26,10 @@ abstract class RepositoryModule {
abstract fun bindJoinRepository(
joinRepositoryImpl: JoinRepositoryImpl
): JoinRepository
+
+ @Binds
+ @Singleton
+ abstract fun bindMyRepository(
+ myRepositoryImpl: MyRepositoryImpl
+ ): MyRepository
}
diff --git a/app/src/main/java/kr/ac/anu/mumu/domain/model/MyInformation.kt b/app/src/main/java/kr/ac/anu/mumu/domain/model/MyInformation.kt
new file mode 100644
index 0000000..bb962c6
--- /dev/null
+++ b/app/src/main/java/kr/ac/anu/mumu/domain/model/MyInformation.kt
@@ -0,0 +1,7 @@
+package kr.ac.anu.mumu.domain.model
+
+data class MyInformation(
+ val id: String,
+ val name: String,
+ val phone: String?
+)
\ No newline at end of file
diff --git a/app/src/main/java/kr/ac/anu/mumu/domain/repository/MyRepository.kt b/app/src/main/java/kr/ac/anu/mumu/domain/repository/MyRepository.kt
new file mode 100644
index 0000000..cc93471
--- /dev/null
+++ b/app/src/main/java/kr/ac/anu/mumu/domain/repository/MyRepository.kt
@@ -0,0 +1,7 @@
+package kr.ac.anu.mumu.domain.repository
+
+import kr.ac.anu.mumu.domain.model.MyInformation
+
+interface MyRepository {
+ suspend fun getUserProfile(userId: Int): Result
+}
\ No newline at end of file
diff --git a/app/src/main/java/kr/ac/anu/mumu/domain/usecase/MyUseCase.kt b/app/src/main/java/kr/ac/anu/mumu/domain/usecase/MyUseCase.kt
new file mode 100644
index 0000000..9564d05
--- /dev/null
+++ b/app/src/main/java/kr/ac/anu/mumu/domain/usecase/MyUseCase.kt
@@ -0,0 +1,14 @@
+package kr.ac.anu.mumu.domain.usecase
+
+import kr.ac.anu.mumu.domain.model.MyInformation
+import kr.ac.anu.mumu.domain.model.User
+import kr.ac.anu.mumu.domain.repository.MyRepository
+import javax.inject.Inject
+
+class MyUseCase @Inject constructor(
+ private val repository: MyRepository
+){
+ suspend operator fun invoke(userId: Int): Result {
+ return repository.getUserProfile(userId)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/kr/ac/anu/mumu/presentation/my/AnimalAdministerActivity.kt b/app/src/main/java/kr/ac/anu/mumu/presentation/my/AnimalAdministerActivity.kt
new file mode 100644
index 0000000..33ae7cc
--- /dev/null
+++ b/app/src/main/java/kr/ac/anu/mumu/presentation/my/AnimalAdministerActivity.kt
@@ -0,0 +1,21 @@
+package kr.ac.anu.mumu.presentation.my
+
+import android.os.Bundle
+import androidx.activity.enableEdgeToEdge
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
+import kr.ac.anu.mumu.R
+
+class AnimalAdministerActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ enableEdgeToEdge()
+ setContentView(R.layout.activity_animal_administer)
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
+ val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
+ insets
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/kr/ac/anu/mumu/presentation/my/ModifyInformationActivity.kt b/app/src/main/java/kr/ac/anu/mumu/presentation/my/ModifyInformationActivity.kt
new file mode 100644
index 0000000..645d2fe
--- /dev/null
+++ b/app/src/main/java/kr/ac/anu/mumu/presentation/my/ModifyInformationActivity.kt
@@ -0,0 +1,22 @@
+package kr.ac.anu.mumu.presentation.my
+
+import android.os.Bundle
+import androidx.activity.enableEdgeToEdge
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
+import kr.ac.anu.mumu.R
+
+class ModifyInformationActivity : AppCompatActivity() {
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ enableEdgeToEdge()
+ setContentView(R.layout.activity_modify_information)
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
+ val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
+ insets
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/kr/ac/anu/mumu/presentation/my/MumuLogoFragment.kt b/app/src/main/java/kr/ac/anu/mumu/presentation/my/MumuLogoFragment.kt
new file mode 100644
index 0000000..c7286c9
--- /dev/null
+++ b/app/src/main/java/kr/ac/anu/mumu/presentation/my/MumuLogoFragment.kt
@@ -0,0 +1,19 @@
+package kr.ac.anu.mumu.presentation.my
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import kr.ac.anu.mumu.R
+
+class MumuLogoFragment : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(R.layout.fragment_mumu_logo, container, false)
+ }
+}
diff --git a/app/src/main/java/kr/ac/anu/mumu/presentation/my/MyActivity.kt b/app/src/main/java/kr/ac/anu/mumu/presentation/my/MyActivity.kt
new file mode 100644
index 0000000..a45cd9b
--- /dev/null
+++ b/app/src/main/java/kr/ac/anu/mumu/presentation/my/MyActivity.kt
@@ -0,0 +1,73 @@
+package kr.ac.anu.mumu.presentation.my
+
+import android.content.Intent
+import android.os.Bundle
+import android.widget.Toast
+import androidx.activity.enableEdgeToEdge
+import androidx.activity.viewModels
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.lifecycleScope
+import androidx.lifecycle.repeatOnLifecycle
+import dagger.hilt.android.AndroidEntryPoint
+import kotlinx.coroutines.launch
+import kr.ac.anu.mumu.R
+import kr.ac.anu.mumu.databinding.ActivityMyBinding
+import kr.ac.anu.mumu.domain.model.MyInformation
+import kr.ac.anu.mumu.presentation.login.LoginUiState
+import kotlin.jvm.java
+
+@AndroidEntryPoint
+class MyActivity : AppCompatActivity() {
+ private lateinit var binding: ActivityMyBinding
+
+ private val viewModel: MyViewModel by viewModels()
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ enableEdgeToEdge()
+ binding = ActivityMyBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
+ val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
+ insets
+ }
+ viewModel.getUserProfile(1)
+
+ observerViewModel()
+ nextScreen()
+ }
+
+ private fun nextScreen() {
+ binding.layoutModifyInformation.setOnClickListener {
+ val intent = Intent(this, ModifyInformationActivity::class.java)
+ startActivity(intent)
+ }
+ binding.layoutAnimalAdminister.setOnClickListener {
+ val intent = Intent(this, AnimalAdministerActivity::class.java)
+ startActivity(intent)
+ }
+ binding.tvMyInformationAdminister1.setOnClickListener {
+ val intent = Intent(this, MyInformationAdministerActivity::class.java)
+ startActivity(intent)
+ }
+ }
+
+ private fun observerViewModel() {
+ lifecycleScope.launch {
+ repeatOnLifecycle(Lifecycle.State.STARTED) {
+ viewModel.uiState.collect { state ->
+ when (state) {
+ is MyUiState.Success -> {
+ binding.tvName.text = state.myInfo.name
+ }
+ else -> {}
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/kr/ac/anu/mumu/presentation/my/MyInformationAdministerActivity.kt b/app/src/main/java/kr/ac/anu/mumu/presentation/my/MyInformationAdministerActivity.kt
new file mode 100644
index 0000000..39ac069
--- /dev/null
+++ b/app/src/main/java/kr/ac/anu/mumu/presentation/my/MyInformationAdministerActivity.kt
@@ -0,0 +1,21 @@
+package kr.ac.anu.mumu.presentation.my
+
+import android.os.Bundle
+import androidx.activity.enableEdgeToEdge
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
+import kr.ac.anu.mumu.R
+
+class MyInformationAdministerActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ enableEdgeToEdge()
+ setContentView(R.layout.activity_my_information_administer)
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
+ val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
+ insets
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/kr/ac/anu/mumu/presentation/my/MyViewModel.kt b/app/src/main/java/kr/ac/anu/mumu/presentation/my/MyViewModel.kt
new file mode 100644
index 0000000..c247608
--- /dev/null
+++ b/app/src/main/java/kr/ac/anu/mumu/presentation/my/MyViewModel.kt
@@ -0,0 +1,38 @@
+package kr.ac.anu.mumu.presentation.my
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import dagger.hilt.android.lifecycle.HiltViewModel
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import kotlinx.coroutines.flow.asStateFlow
+import kotlinx.coroutines.launch
+import kr.ac.anu.mumu.domain.model.MyInformation
+import kr.ac.anu.mumu.domain.usecase.MyUseCase
+import javax.inject.Inject
+
+sealed class MyUiState{
+ object Init: MyUiState()
+ object Loading: MyUiState()
+ data class Success(val myInfo: MyInformation): MyUiState()
+ data class Error(val message: String): MyUiState()
+}
+@HiltViewModel
+class MyViewModel @Inject constructor(
+ private var myUseCase: MyUseCase
+) : ViewModel() {
+ private val _uiState = MutableStateFlow(MyUiState.Init)
+ val uiState: StateFlow = _uiState.asStateFlow()
+
+ fun getUserProfile(userId: Int) {
+ viewModelScope.launch {
+ _uiState.value = MyUiState.Loading
+ val result = myUseCase(userId)
+ result.onSuccess { myInfo ->
+ _uiState.value = MyUiState.Success(myInfo)
+ }.onFailure { error ->
+ _uiState.value = MyUiState.Error(error.message ?: "프로필을 불러오는데 실패했습니다.")
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_gray200_stroke.xml b/app/src/main/res/drawable/bg_gray200_stroke.xml
new file mode 100644
index 0000000..8cfc520
--- /dev/null
+++ b/app/src/main/res/drawable/bg_gray200_stroke.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_gray350_stroke.xml b/app/src/main/res/drawable/bg_gray350_stroke.xml
new file mode 100644
index 0000000..073144b
--- /dev/null
+++ b/app/src/main/res/drawable/bg_gray350_stroke.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_pink_solid.xml b/app/src/main/res/drawable/bg_pink_solid.xml
new file mode 100644
index 0000000..828e90a
--- /dev/null
+++ b/app/src/main/res/drawable/bg_pink_solid.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_start_line.xml b/app/src/main/res/drawable/bg_start_line.xml
new file mode 100644
index 0000000..5cd88df
--- /dev/null
+++ b/app/src/main/res/drawable/bg_start_line.xml
@@ -0,0 +1,14 @@
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_white_solid.xml b/app/src/main/res/drawable/bg_white_solid.xml
new file mode 100644
index 0000000..0b064c8
--- /dev/null
+++ b/app/src/main/res/drawable/bg_white_solid.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_yellow100_solid.xml b/app/src/main/res/drawable/bg_yellow100_solid.xml
new file mode 100644
index 0000000..9560956
--- /dev/null
+++ b/app/src/main/res/drawable/bg_yellow100_solid.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_yellow150_solid.xml b/app/src/main/res/drawable/bg_yellow150_solid.xml
new file mode 100644
index 0000000..1f375f6
--- /dev/null
+++ b/app/src/main/res/drawable/bg_yellow150_solid.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_yellow300_solid.xml b/app/src/main/res/drawable/bg_yellow300_solid.xml
new file mode 100644
index 0000000..60604c1
--- /dev/null
+++ b/app/src/main/res/drawable/bg_yellow300_solid.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_yellow300_stroke.xml b/app/src/main/res/drawable/bg_yellow300_stroke.xml
new file mode 100644
index 0000000..109d0ba
--- /dev/null
+++ b/app/src/main/res/drawable/bg_yellow300_stroke.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_camera.xml b/app/src/main/res/drawable/ic_camera.xml
new file mode 100644
index 0000000..61429f5
--- /dev/null
+++ b/app/src/main/res/drawable/ic_camera.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_eidt.xml b/app/src/main/res/drawable/ic_eidt.xml
new file mode 100644
index 0000000..4699d35
--- /dev/null
+++ b/app/src/main/res/drawable/ic_eidt.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_gender_man.xml b/app/src/main/res/drawable/ic_gender_man.xml
new file mode 100644
index 0000000..ce5da88
--- /dev/null
+++ b/app/src/main/res/drawable/ic_gender_man.xml
@@ -0,0 +1,11 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_animal_administer.xml b/app/src/main/res/layout/activity_animal_administer.xml
new file mode 100644
index 0000000..e3f65aa
--- /dev/null
+++ b/app/src/main/res/layout/activity_animal_administer.xml
@@ -0,0 +1,375 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_modify_information.xml b/app/src/main/res/layout/activity_modify_information.xml
new file mode 100644
index 0000000..4bcbdea
--- /dev/null
+++ b/app/src/main/res/layout/activity_modify_information.xml
@@ -0,0 +1,296 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_my.xml b/app/src/main/res/layout/activity_my.xml
new file mode 100644
index 0000000..d48bbc7
--- /dev/null
+++ b/app/src/main/res/layout/activity_my.xml
@@ -0,0 +1,286 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_my_information_administer.xml b/app/src/main/res/layout/activity_my_information_administer.xml
new file mode 100644
index 0000000..4edb8f9
--- /dev/null
+++ b/app/src/main/res/layout/activity_my_information_administer.xml
@@ -0,0 +1,288 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_mumu_logo.xml b/app/src/main/res/layout/fragment_mumu_logo.xml
new file mode 100644
index 0000000..5bab306
--- /dev/null
+++ b/app/src/main/res/layout/fragment_mumu_logo.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/navigation/nav_graph_join.xml b/app/src/main/res/navigation/nav_graph_join.xml
index 8fd4d8a..9c12a35 100644
--- a/app/src/main/res/navigation/nav_graph_join.xml
+++ b/app/src/main/res/navigation/nav_graph_join.xml
@@ -81,4 +81,10 @@
android:label="FinishFragment"
tools:layout="@layout/fragment_finish" />
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 88c8551..642d514 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -19,6 +19,13 @@
#797979
#404040
+ #FFC13B
+ #FDCB60
+ #FBD685
+ #F9E0AB
+ #F7EBD0
+ #F6EFE2
+
#F44355
#4B88FF
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 74856dc..ee72a8b 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,5 @@
Mumu
+
+ Hello blank fragment
\ No newline at end of file
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 6ec3a43..b4dffb2 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -16,6 +16,7 @@ activity = "1.12.1"
constraintlayout = "2.2.1"
navigationFragmentKtx = "2.9.7"
retrofit2 = "2.9.0"
+runtime = "1.11.4"
[libraries]
androidx-activity-ktx = { module = "androidx.activity:activity-ktx", version.ref = "activityKtx" }
@@ -37,6 +38,7 @@ material = { group = "com.google.android.material", name = "material", version.r
androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "activity" }
androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }
retrofit2 = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit2" }
+androidx-runtime = { group = "androidx.compose.runtime", name = "runtime", version.ref = "runtime" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }