From beafddcf375b7d2c59cc4b5a8032632bccacf643 Mon Sep 17 00:00:00 2001 From: Lemon0610 <92876763+Lemon0610@users.noreply.github.com> Date: Wed, 6 May 2026 13:00:29 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat:=206=EC=A3=BC=EC=B0=A8=20=EB=AF=B8?= =?UTF-8?q?=EC=85=98=5F=EB=A0=88=EB=AA=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 94 - Week2/app/build.gradle.kts | 53 - .../java/com/example/week2/BuyAllFragment.kt | 23 - .../java/com/example/week2/HomeFragment.kt | 23 - .../java/com/example/week2/MainActivity.kt | 62 - .../java/com/example/week2/ProfileFragment.kt | 23 - .../com/example/week2/WishlistFragment.kt | 23 - .../res/layout/bottom_navigation_view.xml | 10 - .../src/main/res/layout/fragment_buy_all.xml | 6 - .../app/src/main/res/layout/fragment_home.xml | 37 - .../src/main/res/layout/fragment_profile.xml | 6 - .../src/main/res/layout/fragment_wishlist.xml | 15 - Week2/app/src/main/res/values/strings.xml | 17 - Week2/build.gradle.kts | 4 - {Week2 => Week3}/.gitignore | 0 {Week2 => Week3}/app/.gitignore | 0 Week3/app/build.gradle.kts | 83 + {Week2 => Week3}/app/proguard-rules.pro | 0 .../example/week3}/ExampleInstrumentedTest.kt | 4 +- .../app/src/main/AndroidManifest.xml | 6 +- .../java/com/example/week3/BuyAllFragment.kt | 42 + .../java/com/example/week3}/BuyFragment.kt | 6 +- .../com/example/week3}/BuyShoesFragment.kt | 4 +- .../com/example/week3}/BuyTopsFragment.kt | 4 +- .../com/example/week3/FollowingAdapter.kt | 35 + .../java/com/example/week3/HomeFragment.kt | 42 + .../java/com/example/week3/LocalRepository.kt | 48 + .../java/com/example/week3/MainActivity.kt | 30 + .../java/com/example/week3/MainViewModel.kt | 63 + .../java/com/example/week3/MyApplication.kt | 9 + .../java/com/example/week3/ProductAdapter.kt | 58 + .../java/com/example/week3/ProductData.kt | 11 + .../java/com/example/week3/ProfileFragment.kt | 38 + .../com/example/week3/RemoteRepository.kt | 13 + .../main/java/com/example/week3/ReqResData.kt | 19 + .../java/com/example/week3/ReqResService.kt | 12 + .../example/week3}/ShoppingcartFragment.kt | 4 +- .../com/example/week3/WishlistFragment.kt | 43 + .../java/com/example/week3/di/LocalModule.kt | 19 + .../com/example/week3/di/NetworkModule.kt | 45 + .../src/main/res/color/wish_heart_tint.xml | 5 + Week3/app/src/main/res/drawable/bg_circle.xml | 5 + .../src/main/res/drawable/ic_bag_simple.png | Bin Week3/app/src/main/res/drawable/ic_event.xml | 9 + .../main/res/drawable/ic_heart_straight.png | Bin .../src/main/res/drawable/ic_house_simple.png | Bin .../res/drawable/ic_launcher_background.xml | 0 .../res/drawable/ic_launcher_foreground.xml | 0 .../res/drawable/ic_list_magnifying_glass.png | Bin Week3/app/src/main/res/drawable/ic_order.xml | 9 + Week3/app/src/main/res/drawable/ic_pass.xml | 9 + .../app/src/main/res/drawable/ic_setting.xml | 9 + .../app/src/main/res/drawable/ic_user.png | Bin .../src/main/res/drawable/ic_wish_heart.xml | 13 + .../main/res/drawable/ic_wish_heart_fill.xml | 13 + Week3/app/src/main/res/drawable/image1.png | Bin 0 -> 45806 bytes Week3/app/src/main/res/drawable/image2.png | Bin 0 -> 13308 bytes Week3/app/src/main/res/drawable/image3.png | Bin 0 -> 25847 bytes Week3/app/src/main/res/drawable/image4.png | Bin 0 -> 3096 bytes .../app/src/main/res/drawable/img_avatar.png | Bin 0 -> 1374 bytes .../src/main/res/drawable/img_bag_circle.png | Bin .../app/src/main/res/drawable/img_home.png | Bin Week3/app/src/main/res/drawable/img_nemo.png | Bin 0 -> 386 bytes .../app/src/main/res/layout/activity_main.xml | 16 +- .../app/src/main/res/layout/fragment_buy.xml | 3 +- .../src/main/res/layout/fragment_buy_all.xml | 12 + .../main/res/layout/fragment_buy_shoes.xml | 3 +- .../src/main/res/layout/fragment_buy_tops.xml | 3 +- .../app/src/main/res/layout/fragment_home.xml | 65 + .../src/main/res/layout/fragment_profile.xml | 190 + .../main/res/layout/fragment_shoppingcart.xml | 3 +- .../src/main/res/layout/fragment_wishlist.xml | 22 + .../src/main/res/layout/item_following.xml | 22 + .../src/main/res/layout/item_grid_product.xml | 64 + .../src/main/res/layout/item_product_home.xml | 30 + .../src/main/res/layout/item_wish_product.xml | 45 + .../app/src/main/res/menu/bottom_nav_menu.xml | 0 .../res/mipmap-anydpi-v26/ic_launcher.xml | 0 .../mipmap-anydpi-v26/ic_launcher_round.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin .../res/mipmap-hdpi/ic_launcher_round.webp | Bin .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin .../res/mipmap-mdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin .../app/src/main/res/navigation/nav_graph.xml | 10 +- .../app/src/main/res/values-night/themes.xml | 2 +- .../app/src/main/res/values/colors.xml | 1 + Week3/app/src/main/res/values/strings.xml | 40 + .../app/src/main/res/values/themes.xml | 4 +- .../app/src/main/res/xml/backup_rules.xml | 0 .../main/res/xml/data_extraction_rules.xml | 0 .../com/example/week3}/ExampleUnitTest.kt | 2 +- Week3/build.gradle.kts | 7 + {Week2 => Week3}/gradle.properties | 4 +- .../gradle/gradle-daemon-jvm.properties | 0 {Week2 => Week3}/gradle/libs.versions.toml | 0 .../gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 6 +- {Week2 => Week3}/gradlew | 0 {Week2 => Week3}/gradlew.bat | 0 Week3/hs_err_pid32732.log | 2522 ++ Week3/replay_pid32732.log | 23127 ++++++++++++++++ {Week2 => Week3}/settings.gradle.kts | 3 +- pull_request_template.md | 19 - 109 files changed, 26881 insertions(+), 450 deletions(-) delete mode 100644 README.md delete mode 100644 Week2/app/build.gradle.kts delete mode 100644 Week2/app/src/main/java/com/example/week2/BuyAllFragment.kt delete mode 100644 Week2/app/src/main/java/com/example/week2/HomeFragment.kt delete mode 100644 Week2/app/src/main/java/com/example/week2/MainActivity.kt delete mode 100644 Week2/app/src/main/java/com/example/week2/ProfileFragment.kt delete mode 100644 Week2/app/src/main/java/com/example/week2/WishlistFragment.kt delete mode 100644 Week2/app/src/main/res/layout/bottom_navigation_view.xml delete mode 100644 Week2/app/src/main/res/layout/fragment_buy_all.xml delete mode 100644 Week2/app/src/main/res/layout/fragment_home.xml delete mode 100644 Week2/app/src/main/res/layout/fragment_profile.xml delete mode 100644 Week2/app/src/main/res/layout/fragment_wishlist.xml delete mode 100644 Week2/app/src/main/res/values/strings.xml delete mode 100644 Week2/build.gradle.kts rename {Week2 => Week3}/.gitignore (100%) rename {Week2 => Week3}/app/.gitignore (100%) create mode 100644 Week3/app/build.gradle.kts rename {Week2 => Week3}/app/proguard-rules.pro (100%) rename {Week2/app/src/androidTest/java/com/example/week2 => Week3/app/src/androidTest/java/com/example/week3}/ExampleInstrumentedTest.kt (86%) rename {Week2 => Week3}/app/src/main/AndroidManifest.xml (81%) create mode 100644 Week3/app/src/main/java/com/example/week3/BuyAllFragment.kt rename {Week2/app/src/main/java/com/example/week2 => Week3/app/src/main/java/com/example/week3}/BuyFragment.kt (94%) rename {Week2/app/src/main/java/com/example/week2 => Week3/app/src/main/java/com/example/week3}/BuyShoesFragment.kt (86%) rename {Week2/app/src/main/java/com/example/week2 => Week3/app/src/main/java/com/example/week3}/BuyTopsFragment.kt (86%) create mode 100644 Week3/app/src/main/java/com/example/week3/FollowingAdapter.kt create mode 100644 Week3/app/src/main/java/com/example/week3/HomeFragment.kt create mode 100644 Week3/app/src/main/java/com/example/week3/LocalRepository.kt create mode 100644 Week3/app/src/main/java/com/example/week3/MainActivity.kt create mode 100644 Week3/app/src/main/java/com/example/week3/MainViewModel.kt create mode 100644 Week3/app/src/main/java/com/example/week3/MyApplication.kt create mode 100644 Week3/app/src/main/java/com/example/week3/ProductAdapter.kt create mode 100644 Week3/app/src/main/java/com/example/week3/ProductData.kt create mode 100644 Week3/app/src/main/java/com/example/week3/ProfileFragment.kt create mode 100644 Week3/app/src/main/java/com/example/week3/RemoteRepository.kt create mode 100644 Week3/app/src/main/java/com/example/week3/ReqResData.kt create mode 100644 Week3/app/src/main/java/com/example/week3/ReqResService.kt rename {Week2/app/src/main/java/com/example/week2 => Week3/app/src/main/java/com/example/week3}/ShoppingcartFragment.kt (91%) create mode 100644 Week3/app/src/main/java/com/example/week3/WishlistFragment.kt create mode 100644 Week3/app/src/main/java/com/example/week3/di/LocalModule.kt create mode 100644 Week3/app/src/main/java/com/example/week3/di/NetworkModule.kt create mode 100644 Week3/app/src/main/res/color/wish_heart_tint.xml create mode 100644 Week3/app/src/main/res/drawable/bg_circle.xml rename {Week2 => Week3}/app/src/main/res/drawable/ic_bag_simple.png (100%) create mode 100644 Week3/app/src/main/res/drawable/ic_event.xml rename {Week2 => Week3}/app/src/main/res/drawable/ic_heart_straight.png (100%) rename {Week2 => Week3}/app/src/main/res/drawable/ic_house_simple.png (100%) rename {Week2 => Week3}/app/src/main/res/drawable/ic_launcher_background.xml (100%) rename {Week2 => Week3}/app/src/main/res/drawable/ic_launcher_foreground.xml (100%) rename {Week2 => Week3}/app/src/main/res/drawable/ic_list_magnifying_glass.png (100%) create mode 100644 Week3/app/src/main/res/drawable/ic_order.xml create mode 100644 Week3/app/src/main/res/drawable/ic_pass.xml create mode 100644 Week3/app/src/main/res/drawable/ic_setting.xml rename {Week2 => Week3}/app/src/main/res/drawable/ic_user.png (100%) create mode 100644 Week3/app/src/main/res/drawable/ic_wish_heart.xml create mode 100644 Week3/app/src/main/res/drawable/ic_wish_heart_fill.xml create mode 100644 Week3/app/src/main/res/drawable/image1.png create mode 100644 Week3/app/src/main/res/drawable/image2.png create mode 100644 Week3/app/src/main/res/drawable/image3.png create mode 100644 Week3/app/src/main/res/drawable/image4.png create mode 100644 Week3/app/src/main/res/drawable/img_avatar.png rename {Week2 => Week3}/app/src/main/res/drawable/img_bag_circle.png (100%) rename {Week2 => Week3}/app/src/main/res/drawable/img_home.png (100%) create mode 100644 Week3/app/src/main/res/drawable/img_nemo.png rename {Week2 => Week3}/app/src/main/res/layout/activity_main.xml (68%) rename {Week2 => Week3}/app/src/main/res/layout/fragment_buy.xml (92%) create mode 100644 Week3/app/src/main/res/layout/fragment_buy_all.xml rename {Week2 => Week3}/app/src/main/res/layout/fragment_buy_shoes.xml (80%) rename {Week2 => Week3}/app/src/main/res/layout/fragment_buy_tops.xml (80%) create mode 100644 Week3/app/src/main/res/layout/fragment_home.xml create mode 100644 Week3/app/src/main/res/layout/fragment_profile.xml rename {Week2 => Week3}/app/src/main/res/layout/fragment_shoppingcart.xml (94%) create mode 100644 Week3/app/src/main/res/layout/fragment_wishlist.xml create mode 100644 Week3/app/src/main/res/layout/item_following.xml create mode 100644 Week3/app/src/main/res/layout/item_grid_product.xml create mode 100644 Week3/app/src/main/res/layout/item_product_home.xml create mode 100644 Week3/app/src/main/res/layout/item_wish_product.xml rename {Week2 => Week3}/app/src/main/res/menu/bottom_nav_menu.xml (100%) rename {Week2 => Week3}/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml (100%) rename {Week2 => Week3}/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml (100%) rename {Week2 => Week3}/app/src/main/res/mipmap-hdpi/ic_launcher.webp (100%) rename {Week2 => Week3}/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp (100%) rename {Week2 => Week3}/app/src/main/res/mipmap-mdpi/ic_launcher.webp (100%) rename {Week2 => Week3}/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp (100%) rename {Week2 => Week3}/app/src/main/res/mipmap-xhdpi/ic_launcher.webp (100%) rename {Week2 => Week3}/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp (100%) rename {Week2 => Week3}/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp (100%) rename {Week2 => Week3}/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp (100%) rename {Week2 => Week3}/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp (100%) rename {Week2 => Week3}/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp (100%) rename {Week2 => Week3}/app/src/main/res/navigation/nav_graph.xml (74%) rename {Week2 => Week3}/app/src/main/res/values-night/themes.xml (80%) rename {Week2 => Week3}/app/src/main/res/values/colors.xml (75%) create mode 100644 Week3/app/src/main/res/values/strings.xml rename {Week2 => Week3}/app/src/main/res/values/themes.xml (78%) rename {Week2 => Week3}/app/src/main/res/xml/backup_rules.xml (100%) rename {Week2 => Week3}/app/src/main/res/xml/data_extraction_rules.xml (100%) rename {Week2/app/src/test/java/com/example/week2 => Week3/app/src/test/java/com/example/week3}/ExampleUnitTest.kt (92%) create mode 100644 Week3/build.gradle.kts rename {Week2 => Week3}/gradle.properties (91%) rename {Week2 => Week3}/gradle/gradle-daemon-jvm.properties (100%) rename {Week2 => Week3}/gradle/libs.versions.toml (100%) rename {Week2 => Week3}/gradle/wrapper/gradle-wrapper.jar (100%) rename {Week2 => Week3}/gradle/wrapper/gradle-wrapper.properties (56%) rename {Week2 => Week3}/gradlew (100%) rename {Week2 => Week3}/gradlew.bat (100%) create mode 100644 Week3/hs_err_pid32732.log create mode 100644 Week3/replay_pid32732.log rename {Week2 => Week3}/settings.gradle.kts (95%) delete mode 100644 pull_request_template.md diff --git a/README.md b/README.md deleted file mode 100644 index 2c7613b..0000000 --- a/README.md +++ /dev/null @@ -1,94 +0,0 @@ -# 10th_Android - - -

팀원 구성

-
- - - - - - - - - - - - - - - - -
도리/ 김도연(팀장)제로/ 정규은(팀원)레몬/ 김지아(팀원)우가/ 강수아(팀원)묵은지/ 임은지(팀원)
-
- @kimdoyeon1234 -
-
- @jeongkyueun -
-
- @Lemon0610 -
-
- @sua710 -
-
- @mookeunji05 -
- -
- -### Git 작업 순서 - -본인의 브랜치에서만 작업하고, `main` 브랜치는 직접 수정하지 않습니다. - -#### 1. 현재 브랜치 확인 -```sh -git branch -``` - -#### 2. 변경 사항 확인 -```sh -git status -``` - -#### 3. 변경된 파일 추가 -```sh -git add . -``` - -#### 4. 커밋 메시지 작성 -```sh -git commit -m "Commit Message" -``` - -#### 5. 원격 저장소에 본인 브랜치로 푸시 -```sh -git push origin <브랜치명> -``` - -### Commit Convention - -커밋 메시지는 `타입: n주차 미션 설명`의 형식을 갖추어 작성합니다. - -| 타입 | 설명 | -|-----------|--------------------------------| -| feat | 새로운 기능 추가 | -| fix | 버그 수정 | -| refactor | 코드 리팩토링 | -| docs | 문서 수정 (README 등) | -| style | 코드 스타일 변경 (세미콜론 추가 등)| -| chore | 빌드 및 패키지 설정 변경 | -| test | 테스트 코드 추가 | - -#### Commit Example -```sh -git commit -m "feat: 1주차 미션 화면 전환 기능" -git commit -m "fix: 5주차 미션 API 응답 오류 수정" -``` - -### PR Convention - -- Pull Request(PR)은 미션 별로 생성합니다. -- PR 제목은 `n주차 미션` 형식으로 작성합니다. -- 파트장이 승인한 후, main 브랜치로 Merge 합니다. diff --git a/Week2/app/build.gradle.kts b/Week2/app/build.gradle.kts deleted file mode 100644 index 8707c64..0000000 --- a/Week2/app/build.gradle.kts +++ /dev/null @@ -1,53 +0,0 @@ -plugins { - alias(libs.plugins.android.application) -} - -android { - namespace = "com.example.week2" - compileSdk { - version = release(36) { - minorApiLevel = 1 - } - } - - defaultConfig { - applicationId = "com.example.week2" - minSdk = 24 - targetSdk = 36 - versionCode = 1 - versionName = "1.0" - - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } - - buildTypes { - release { - isMinifyEnabled = false - proguardFiles( - getDefaultProguardFile("proguard-android-optimize.txt"), - "proguard-rules.pro" - ) - } - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } - - buildFeatures { - viewBinding = true - } -} - -dependencies { - implementation(libs.androidx.core.ktx) - implementation(libs.androidx.appcompat) - implementation(libs.material) - implementation(libs.androidx.activity) - implementation(libs.androidx.constraintlayout) - testImplementation(libs.junit) - androidTestImplementation(libs.androidx.junit) - androidTestImplementation(libs.androidx.espresso.core) - implementation(libs.androidx.navigation.fragment.ktx) - implementation(libs.androidx.navigation.ui.ktx) -} \ No newline at end of file diff --git a/Week2/app/src/main/java/com/example/week2/BuyAllFragment.kt b/Week2/app/src/main/java/com/example/week2/BuyAllFragment.kt deleted file mode 100644 index 79ed64b..0000000 --- a/Week2/app/src/main/java/com/example/week2/BuyAllFragment.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.example.week2 - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.Fragment - -class BuyAllFragment : Fragment() { - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - return inflater.inflate(R.layout.fragment_buy_all, container, false) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - } -} \ No newline at end of file diff --git a/Week2/app/src/main/java/com/example/week2/HomeFragment.kt b/Week2/app/src/main/java/com/example/week2/HomeFragment.kt deleted file mode 100644 index 6035368..0000000 --- a/Week2/app/src/main/java/com/example/week2/HomeFragment.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.example.week2 - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.Fragment - -class HomeFragment : Fragment() { - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - return inflater.inflate(R.layout.fragment_home, container, false) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - } -} \ No newline at end of file diff --git a/Week2/app/src/main/java/com/example/week2/MainActivity.kt b/Week2/app/src/main/java/com/example/week2/MainActivity.kt deleted file mode 100644 index 88f176a..0000000 --- a/Week2/app/src/main/java/com/example/week2/MainActivity.kt +++ /dev/null @@ -1,62 +0,0 @@ -package com.example.week2 -import com.example.week2.databinding.ActivityMainBinding - -import android.os.Bundle -import androidx.activity.enableEdgeToEdge -import androidx.appcompat.app.AppCompatActivity -import androidx.core.view.ViewCompat -import androidx.core.view.WindowInsetsCompat -import android.util.Log -import androidx.fragment.app.Fragment -import androidx.navigation.fragment.NavHostFragment -import androidx.navigation.ui.setupWithNavController - -class MainActivity : AppCompatActivity() { - private val TAG = "LIFE_QUIZ" - private lateinit var binding: ActivityMainBinding - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - enableEdgeToEdge() - Log.d(TAG, "onCreate") - - binding = ActivityMainBinding.inflate(layoutInflater) - setContentView(binding.root) - - val navHostFragment = supportFragmentManager - .findFragmentById(R.id.nav_host_fragment) as NavHostFragment - val navController = navHostFragment.navController - binding.bottomBarInclude.bottomNav.setupWithNavController(navController) - - ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, insets -> - val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) - v.setPadding(systemBars.left, systemBars.top, systemBars.right, 0) - insets - } - } - - override fun onStart() { - super.onStart() - Log.d(TAG, "onStart") - } - override fun onResume() { - super.onResume() - Log.d(TAG, "onResume") - } - override fun onPause() { - super.onPause() - Log.d(TAG, "onPause") - } - override fun onStop() { - super.onStop() - Log.d(TAG, "onStop") - } - override fun onDestroy() { - super.onDestroy() - Log.d(TAG, "onDestroy") - } - override fun onRestart() { - super.onRestart() - Log.d(TAG, "onRestart") - } -} \ No newline at end of file diff --git a/Week2/app/src/main/java/com/example/week2/ProfileFragment.kt b/Week2/app/src/main/java/com/example/week2/ProfileFragment.kt deleted file mode 100644 index 3124d89..0000000 --- a/Week2/app/src/main/java/com/example/week2/ProfileFragment.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.example.week2 - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.Fragment - -class ProfileFragment : Fragment() { - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - return inflater.inflate(R.layout.fragment_profile, container, false) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - } -} \ No newline at end of file diff --git a/Week2/app/src/main/java/com/example/week2/WishlistFragment.kt b/Week2/app/src/main/java/com/example/week2/WishlistFragment.kt deleted file mode 100644 index 99ab096..0000000 --- a/Week2/app/src/main/java/com/example/week2/WishlistFragment.kt +++ /dev/null @@ -1,23 +0,0 @@ -package com.example.week2 - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.Fragment - -class WishlistFragment : Fragment() { - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View { - return inflater.inflate(R.layout.fragment_wishlist, container, false) - } - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - } -} \ No newline at end of file diff --git a/Week2/app/src/main/res/layout/bottom_navigation_view.xml b/Week2/app/src/main/res/layout/bottom_navigation_view.xml deleted file mode 100644 index c59b4ee..0000000 --- a/Week2/app/src/main/res/layout/bottom_navigation_view.xml +++ /dev/null @@ -1,10 +0,0 @@ - - \ No newline at end of file diff --git a/Week2/app/src/main/res/layout/fragment_buy_all.xml b/Week2/app/src/main/res/layout/fragment_buy_all.xml deleted file mode 100644 index 0f36c22..0000000 --- a/Week2/app/src/main/res/layout/fragment_buy_all.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/Week2/app/src/main/res/layout/fragment_home.xml b/Week2/app/src/main/res/layout/fragment_home.xml deleted file mode 100644 index ee98f38..0000000 --- a/Week2/app/src/main/res/layout/fragment_home.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Week2/app/src/main/res/layout/fragment_profile.xml b/Week2/app/src/main/res/layout/fragment_profile.xml deleted file mode 100644 index 0f36c22..0000000 --- a/Week2/app/src/main/res/layout/fragment_profile.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/Week2/app/src/main/res/layout/fragment_wishlist.xml b/Week2/app/src/main/res/layout/fragment_wishlist.xml deleted file mode 100644 index cc03be7..0000000 --- a/Week2/app/src/main/res/layout/fragment_wishlist.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Week2/app/src/main/res/values/strings.xml b/Week2/app/src/main/res/values/strings.xml deleted file mode 100644 index d52c695..0000000 --- a/Week2/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,17 +0,0 @@ - - Week2 - - 구매하기 - 위시리스트 - 장바구니 - 프로필 - Discover - 9월 4일 목요일 - 전체 - Tops & T-Shirts - Shoes - 위시리스트 - 장바구니가 비어있습니다. - 제품을 추가하면 여기에 표시됩니다. - 주문하기 - \ No newline at end of file diff --git a/Week2/build.gradle.kts b/Week2/build.gradle.kts deleted file mode 100644 index 3756278..0000000 --- a/Week2/build.gradle.kts +++ /dev/null @@ -1,4 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. -plugins { - alias(libs.plugins.android.application) apply false -} \ No newline at end of file diff --git a/Week2/.gitignore b/Week3/.gitignore similarity index 100% rename from Week2/.gitignore rename to Week3/.gitignore diff --git a/Week2/app/.gitignore b/Week3/app/.gitignore similarity index 100% rename from Week2/app/.gitignore rename to Week3/app/.gitignore diff --git a/Week3/app/build.gradle.kts b/Week3/app/build.gradle.kts new file mode 100644 index 0000000..74aa6be --- /dev/null +++ b/Week3/app/build.gradle.kts @@ -0,0 +1,83 @@ +plugins { + id("com.android.application") + id("org.jetbrains.kotlin.android") + id("kotlin-kapt") + id("com.google.dagger.hilt.android") +} + +android { + namespace = "com.example.week3" + compileSdk = 34 + + defaultConfig { + applicationId = "com.example.week3" + minSdk = 24 + targetSdk = 34 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + + buildFeatures { + viewBinding = true + } +} + +dependencies { + // AndroidX & UI + implementation("androidx.core:core-ktx:1.12.0") + implementation("androidx.appcompat:appcompat:1.6.1") + implementation("com.google.android.material:material:1.11.0") + implementation("androidx.constraintlayout:constraintlayout:2.1.4") + implementation("androidx.activity:activity-ktx:1.8.2") + implementation("androidx.fragment:fragment-ktx:1.6.2") + + // Hilt + implementation("com.google.dagger:hilt-android:2.48.1") + kapt("com.google.dagger:hilt-android-compiler:2.48.1") + + // Navigation + implementation("androidx.navigation:navigation-fragment-ktx:2.7.7") + implementation("androidx.navigation:navigation-ui-ktx:2.7.7") + + // DataStore & Gson + implementation("androidx.datastore:datastore-preferences:1.0.0") + implementation("com.google.code.gson:gson:2.10.1") + + // Retrofit + implementation("com.squareup.retrofit2:retrofit:2.9.0") + implementation("com.squareup.retrofit2:converter-gson:2.9.0") + implementation("com.squareup.okhttp3:logging-interceptor:4.12.0") + + // Room + implementation("androidx.room:room-runtime:2.6.1") + kapt("androidx.room:room-compiler:2.6.1") + implementation("androidx.room:room-ktx:2.6.1") + + // Glide + implementation("com.github.bumptech.glide:glide:4.16.0") + kapt("com.github.bumptech.glide:compiler:4.16.0") + + // Coroutines + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0") + + // Test + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.1.5") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") +} \ No newline at end of file diff --git a/Week2/app/proguard-rules.pro b/Week3/app/proguard-rules.pro similarity index 100% rename from Week2/app/proguard-rules.pro rename to Week3/app/proguard-rules.pro diff --git a/Week2/app/src/androidTest/java/com/example/week2/ExampleInstrumentedTest.kt b/Week3/app/src/androidTest/java/com/example/week3/ExampleInstrumentedTest.kt similarity index 86% rename from Week2/app/src/androidTest/java/com/example/week2/ExampleInstrumentedTest.kt rename to Week3/app/src/androidTest/java/com/example/week3/ExampleInstrumentedTest.kt index e20abc4..460ce62 100644 --- a/Week2/app/src/androidTest/java/com/example/week2/ExampleInstrumentedTest.kt +++ b/Week3/app/src/androidTest/java/com/example/week3/ExampleInstrumentedTest.kt @@ -1,4 +1,4 @@ -package com.example.week2 +package com.example.week3 import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 @@ -19,6 +19,6 @@ class ExampleInstrumentedTest { fun useAppContext() { // Context of the app under test. val appContext = InstrumentationRegistry.getInstrumentation().targetContext - assertEquals("com.example.week2", appContext.packageName) + assertEquals("com.example.week3", appContext.packageName) } } \ No newline at end of file diff --git a/Week2/app/src/main/AndroidManifest.xml b/Week3/app/src/main/AndroidManifest.xml similarity index 81% rename from Week2/app/src/main/AndroidManifest.xml rename to Week3/app/src/main/AndroidManifest.xml index 8a17b4a..a9ea48c 100644 --- a/Week2/app/src/main/AndroidManifest.xml +++ b/Week3/app/src/main/AndroidManifest.xml @@ -1,8 +1,9 @@ - + + android:theme="@style/Theme.Week3" + android:usesCleartextTraffic="true"> diff --git a/Week3/app/src/main/java/com/example/week3/BuyAllFragment.kt b/Week3/app/src/main/java/com/example/week3/BuyAllFragment.kt new file mode 100644 index 0000000..1576c5c --- /dev/null +++ b/Week3/app/src/main/java/com/example/week3/BuyAllFragment.kt @@ -0,0 +1,42 @@ +package com.example.week3 + +import android.os.Bundle +import android.view.View +import androidx.fragment.app.Fragment +import androidx.fragment.app.viewModels +import androidx.recyclerview.widget.GridLayoutManager +import com.example.week3.databinding.FragmentBuyAllBinding +import dagger.hilt.android.AndroidEntryPoint + +@AndroidEntryPoint +class BuyAllFragment : Fragment(R.layout.fragment_buy_all) { + private var _binding: FragmentBuyAllBinding? = null + private val binding get() = _binding!! + + private val viewModel: MainViewModel by viewModels() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + _binding = FragmentBuyAllBinding.bind(view) + + val productAdapter = ProductAdapter { clickedItem -> + viewModel.toggleWishStatus(clickedItem.id) + } + + binding.recyclerGrid.apply { + adapter = productAdapter + layoutManager = GridLayoutManager(requireContext(), 2) + } + + viewModel.productList.observe(viewLifecycleOwner) { updatedList -> + productAdapter.submitList(updatedList) + } + + viewModel.fetchLocalProducts() + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } +} \ No newline at end of file diff --git a/Week2/app/src/main/java/com/example/week2/BuyFragment.kt b/Week3/app/src/main/java/com/example/week3/BuyFragment.kt similarity index 94% rename from Week2/app/src/main/java/com/example/week2/BuyFragment.kt rename to Week3/app/src/main/java/com/example/week3/BuyFragment.kt index 155d22f..8c64b14 100644 --- a/Week2/app/src/main/java/com/example/week2/BuyFragment.kt +++ b/Week3/app/src/main/java/com/example/week3/BuyFragment.kt @@ -1,4 +1,4 @@ -package com.example.week2 +package com.example.week3 import android.graphics.Typeface import android.os.Bundle @@ -6,9 +6,11 @@ import android.view.View import android.view.ViewGroup import android.widget.TextView import androidx.fragment.app.Fragment -import com.example.week2.databinding.FragmentBuyBinding +import com.example.week3.databinding.FragmentBuyBinding import com.google.android.material.tabs.TabLayout +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class BuyFragment : Fragment(R.layout.fragment_buy) { private var _binding: FragmentBuyBinding? = null diff --git a/Week2/app/src/main/java/com/example/week2/BuyShoesFragment.kt b/Week3/app/src/main/java/com/example/week3/BuyShoesFragment.kt similarity index 86% rename from Week2/app/src/main/java/com/example/week2/BuyShoesFragment.kt rename to Week3/app/src/main/java/com/example/week3/BuyShoesFragment.kt index d818d30..fe2c655 100644 --- a/Week2/app/src/main/java/com/example/week2/BuyShoesFragment.kt +++ b/Week3/app/src/main/java/com/example/week3/BuyShoesFragment.kt @@ -1,11 +1,13 @@ -package com.example.week2 +package com.example.week3 import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class BuyShoesFragment : Fragment() { override fun onCreateView( diff --git a/Week2/app/src/main/java/com/example/week2/BuyTopsFragment.kt b/Week3/app/src/main/java/com/example/week3/BuyTopsFragment.kt similarity index 86% rename from Week2/app/src/main/java/com/example/week2/BuyTopsFragment.kt rename to Week3/app/src/main/java/com/example/week3/BuyTopsFragment.kt index 27357fe..fddbcaa 100644 --- a/Week2/app/src/main/java/com/example/week2/BuyTopsFragment.kt +++ b/Week3/app/src/main/java/com/example/week3/BuyTopsFragment.kt @@ -1,11 +1,13 @@ -package com.example.week2 +package com.example.week3 import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class BuyTopsFragment : Fragment() { override fun onCreateView( diff --git a/Week3/app/src/main/java/com/example/week3/FollowingAdapter.kt b/Week3/app/src/main/java/com/example/week3/FollowingAdapter.kt new file mode 100644 index 0000000..7c19fec --- /dev/null +++ b/Week3/app/src/main/java/com/example/week3/FollowingAdapter.kt @@ -0,0 +1,35 @@ +package com.example.week3 + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide + +class FollowingAdapter(private val userList: List) : + RecyclerView.Adapter() { + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FollowingViewHolder { + val view = LayoutInflater.from(parent.context) + .inflate(R.layout.item_following, parent, false) + return FollowingViewHolder(view) + } + + override fun onBindViewHolder(holder: FollowingViewHolder, position: Int) { + val user = userList[position] + holder.name.text = user.firstName + + Glide.with(holder.itemView.context) + .load(user.avatar) + .into(holder.image) + } + + override fun getItemCount(): Int = userList.size + + class FollowingViewHolder(view: View) : RecyclerView.ViewHolder(view) { + val image: ImageView = view.findViewById(R.id.ivFollowingProfile) + val name: TextView = view.findViewById(R.id.tvFollowingName) + } +} \ No newline at end of file diff --git a/Week3/app/src/main/java/com/example/week3/HomeFragment.kt b/Week3/app/src/main/java/com/example/week3/HomeFragment.kt new file mode 100644 index 0000000..08a39a5 --- /dev/null +++ b/Week3/app/src/main/java/com/example/week3/HomeFragment.kt @@ -0,0 +1,42 @@ +package com.example.week3 + +import android.os.Bundle +import android.view.View +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.LinearLayoutManager +import com.example.week3.databinding.FragmentHomeBinding +import dagger.hilt.android.AndroidEntryPoint +import androidx.fragment.app.viewModels + +@AndroidEntryPoint +class HomeFragment : Fragment(R.layout.fragment_home) { + private var _binding: FragmentHomeBinding? = null + private val binding get() = _binding!! + + private val viewModel: MainViewModel by viewModels() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + _binding = FragmentHomeBinding.bind(view) + + val productAdapter = ProductAdapter { clickedItem -> + viewModel.toggleWishStatus(clickedItem.id) + } + + binding.recyclerViewHome.apply { + adapter = productAdapter + layoutManager = LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false) + isNestedScrollingEnabled = false + } + + viewModel.productList.observe(viewLifecycleOwner) { allProducts -> + productAdapter.submitList(allProducts) + } + viewModel.fetchLocalProducts() + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } +} \ No newline at end of file diff --git a/Week3/app/src/main/java/com/example/week3/LocalRepository.kt b/Week3/app/src/main/java/com/example/week3/LocalRepository.kt new file mode 100644 index 0000000..4e0730f --- /dev/null +++ b/Week3/app/src/main/java/com/example/week3/LocalRepository.kt @@ -0,0 +1,48 @@ +package com.example.week3 + +import android.content.Context +import androidx.datastore.preferences.core.edit +import androidx.datastore.preferences.core.stringPreferencesKey +import androidx.datastore.preferences.preferencesDataStore +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import dagger.hilt.android.qualifiers.ApplicationContext +import kotlinx.coroutines.flow.first +import javax.inject.Inject +import javax.inject.Singleton + +private val Context.dataStore by preferencesDataStore(name = "product_prefs") + +@Singleton +class LocalRepository @Inject constructor( + @ApplicationContext private val context: Context, + private val gson: Gson +) { + private val PRODUCTS_KEY = stringPreferencesKey("products_json") + + private val initialList = listOf( + ProductData(1, "image4", "상품1", "설명1", 1, "₩20,000"), + ProductData(2, "image2", "상품2", "설명2", 2, "₩40,000"), + ProductData(3, "image3", "상품3", "설명3", 4, "₩80,000"), + ProductData(4, "image1", "상품4", "설명4", 5, "₩100,000") + ) + + suspend fun getProducts(): List { + val preferences = context.dataStore.data.first() + val json = preferences[PRODUCTS_KEY] + return if (json == null) { + saveProducts(initialList) + initialList + } else { + val type = object : TypeToken>() {}.type + gson.fromJson(json, type) + } + } + + suspend fun saveProducts(productList: List) { + val jsonString = gson.toJson(productList) + context.dataStore.edit { preferences -> + preferences[PRODUCTS_KEY] = jsonString + } + } +} \ No newline at end of file diff --git a/Week3/app/src/main/java/com/example/week3/MainActivity.kt b/Week3/app/src/main/java/com/example/week3/MainActivity.kt new file mode 100644 index 0000000..4dd824d --- /dev/null +++ b/Week3/app/src/main/java/com/example/week3/MainActivity.kt @@ -0,0 +1,30 @@ +package com.example.week3 + +import com.example.week3.databinding.ActivityMainBinding + +import android.os.Bundle +import androidx.activity.enableEdgeToEdge +import androidx.appcompat.app.AppCompatActivity +import androidx.navigation.fragment.NavHostFragment +import androidx.navigation.ui.setupWithNavController +import dagger.hilt.android.AndroidEntryPoint + +@AndroidEntryPoint +class MainActivity : AppCompatActivity() { + + private lateinit var binding: ActivityMainBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + + binding = ActivityMainBinding.inflate(layoutInflater) + setContentView(binding.root) + + val navHostFragment = supportFragmentManager + .findFragmentById(R.id.nav_host_fragment) as NavHostFragment + val navController = navHostFragment.navController + + binding.bottomNav.setupWithNavController(navController) + } +} \ No newline at end of file diff --git a/Week3/app/src/main/java/com/example/week3/MainViewModel.kt b/Week3/app/src/main/java/com/example/week3/MainViewModel.kt new file mode 100644 index 0000000..73e4ae8 --- /dev/null +++ b/Week3/app/src/main/java/com/example/week3/MainViewModel.kt @@ -0,0 +1,63 @@ +package com.example.week3 + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.launch +import javax.inject.Inject + +@HiltViewModel +class MainViewModel @Inject constructor( + private val remoteRepository: RemoteRepository, + private val localRepository: LocalRepository +) : ViewModel() { + private val _productList = MutableLiveData>() + val productList: LiveData> = _productList + + private val _userProfile = MutableLiveData() + val userProfile: LiveData = _userProfile + + private val _userList = MutableLiveData>() + val userList: LiveData> = _userList + + private val _errorMessage = MutableLiveData() + val errorMessage: LiveData = _errorMessage + + fun fetchProfileData() { + viewModelScope.launch { + try { + val profileResponse = remoteRepository.getProfile() + _userProfile.value = profileResponse.data + + val listResponse = remoteRepository.getFollowingList() + _userList.value = listResponse.data.filter { it.id != 1 } + + } catch (e: Exception) { + } + } + } + + fun fetchLocalProducts() { + viewModelScope.launch { + val products = localRepository.getProducts() + _productList.value = products + } + } + + fun toggleWishStatus(productId: Int) { + viewModelScope.launch { + val currentList = _productList.value?.toMutableList() ?: return@launch + val index = currentList.indexOfFirst { it.id == productId } + + if (index != -1) { + val targetItem = currentList[index] + currentList[index] = targetItem.copy(isWished = !targetItem.isWished) + + localRepository.saveProducts(currentList) + _productList.value = currentList + } + } + } +} \ No newline at end of file diff --git a/Week3/app/src/main/java/com/example/week3/MyApplication.kt b/Week3/app/src/main/java/com/example/week3/MyApplication.kt new file mode 100644 index 0000000..0bbb5ae --- /dev/null +++ b/Week3/app/src/main/java/com/example/week3/MyApplication.kt @@ -0,0 +1,9 @@ +package com.example.week3 + +import android.app.Application +import dagger.hilt.android.HiltAndroidApp + +@HiltAndroidApp +class MyApplication : Application() { + +} \ No newline at end of file diff --git a/Week3/app/src/main/java/com/example/week3/ProductAdapter.kt b/Week3/app/src/main/java/com/example/week3/ProductAdapter.kt new file mode 100644 index 0000000..6ef5f30 --- /dev/null +++ b/Week3/app/src/main/java/com/example/week3/ProductAdapter.kt @@ -0,0 +1,58 @@ +package com.example.week3 + +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.DiffUtil +import androidx.recyclerview.widget.ListAdapter +import androidx.recyclerview.widget.RecyclerView +import com.example.week3.databinding.ItemGridProductBinding + + +class ProductAdapter(private val onWishClick: (ProductData) -> Unit +) : ListAdapter(ProductDiffCallback()) { + + inner class ViewHolder(val binding: ItemGridProductBinding) : RecyclerView.ViewHolder(binding.root) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { + val binding = ItemGridProductBinding.inflate(LayoutInflater.from(parent.context), parent, false) + return ViewHolder(binding) + } + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val item = getItem(position) + with(holder.binding) { + val context = root.context + val resourceId = context.resources.getIdentifier( + item.imageRes, "drawable", context.packageName + ) + + if (resourceId != 0) { + imgProduct.setImageResource(resourceId) + } else { + imgProduct.setImageResource(R.drawable.img_nemo) + } + txtName.text = item.name + txtDesc.text = item.desc + txtColor.text = "색상 ${item.colorCount}개" + txtPrice.text = item.price + + btnWish.setImageResource( + if (item.isWished) R.drawable.ic_wish_heart_fill else R.drawable.ic_wish_heart + ) + + btnWish.setOnClickListener { + onWishClick(item) + } + } + } +} + +class ProductDiffCallback : DiffUtil.ItemCallback() { + override fun areItemsTheSame(oldItem: ProductData, newItem: ProductData): Boolean { + return oldItem.id == newItem.id + } + + override fun areContentsTheSame(oldItem: ProductData, newItem: ProductData): Boolean { + return oldItem == newItem + } +} \ No newline at end of file diff --git a/Week3/app/src/main/java/com/example/week3/ProductData.kt b/Week3/app/src/main/java/com/example/week3/ProductData.kt new file mode 100644 index 0000000..cd5788e --- /dev/null +++ b/Week3/app/src/main/java/com/example/week3/ProductData.kt @@ -0,0 +1,11 @@ +package com.example.week3 + +data class ProductData ( + val id: Int, + val imageRes: String, + val name: String, + val desc: String, + val colorCount: Int, + val price: String, + var isWished: Boolean = false +) \ No newline at end of file diff --git a/Week3/app/src/main/java/com/example/week3/ProfileFragment.kt b/Week3/app/src/main/java/com/example/week3/ProfileFragment.kt new file mode 100644 index 0000000..98cf872 --- /dev/null +++ b/Week3/app/src/main/java/com/example/week3/ProfileFragment.kt @@ -0,0 +1,38 @@ +package com.example.week3 + +import android.os.Bundle +import android.view.View +import android.widget.ImageView +import android.widget.TextView +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import dagger.hilt.android.AndroidEntryPoint +import androidx.fragment.app.viewModels + +@AndroidEntryPoint +class ProfileFragment : Fragment(R.layout.fragment_profile) { + + private val viewModel: MainViewModel by viewModels() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + val imgProfile = view.findViewById(R.id.imgProfile) + val tvNickname = view.findViewById(R.id.nickname) + val rvFollowing = view.findViewById(R.id.rvFollowing) + + viewModel.userProfile.observe(viewLifecycleOwner) { user -> + tvNickname.text = "${user.firstName} ${user.lastName}" + Glide.with(this).load(user.avatar).into(imgProfile) + } + + viewModel.userList.observe(viewLifecycleOwner) { users -> + rvFollowing.adapter = FollowingAdapter(users) + rvFollowing.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false) + } + + viewModel.fetchProfileData() + } +} \ No newline at end of file diff --git a/Week3/app/src/main/java/com/example/week3/RemoteRepository.kt b/Week3/app/src/main/java/com/example/week3/RemoteRepository.kt new file mode 100644 index 0000000..0fe66e2 --- /dev/null +++ b/Week3/app/src/main/java/com/example/week3/RemoteRepository.kt @@ -0,0 +1,13 @@ +package com.example.week3 + +import javax.inject.Inject +import javax.inject.Singleton + +@Singleton +class RemoteRepository @Inject constructor( + private val reqResService: ReqResService +) { + suspend fun getProfile() = reqResService.getProfile() + + suspend fun getFollowingList(page: Int = 1) = reqResService.getFollowingList(page) +} \ No newline at end of file diff --git a/Week3/app/src/main/java/com/example/week3/ReqResData.kt b/Week3/app/src/main/java/com/example/week3/ReqResData.kt new file mode 100644 index 0000000..443a43d --- /dev/null +++ b/Week3/app/src/main/java/com/example/week3/ReqResData.kt @@ -0,0 +1,19 @@ +package com.example.week3 + +import com.google.gson.annotations.SerializedName + +data class SingleUserResponse( + val data: UserData +) + +data class UserListResponse( + val data: List +) + +data class UserData( + val id: Int, + val email: String, + @SerializedName("first_name") val firstName: String, + @SerializedName("last_name") val lastName: String, + val avatar: String +) \ No newline at end of file diff --git a/Week3/app/src/main/java/com/example/week3/ReqResService.kt b/Week3/app/src/main/java/com/example/week3/ReqResService.kt new file mode 100644 index 0000000..67b4df5 --- /dev/null +++ b/Week3/app/src/main/java/com/example/week3/ReqResService.kt @@ -0,0 +1,12 @@ +package com.example.week3 + +import retrofit2.http.GET +import retrofit2.http.Query + +interface ReqResService { + @GET("api/users/1") + suspend fun getProfile(): SingleUserResponse + + @GET("api/users") + suspend fun getFollowingList(@Query("page") page: Int = 1): UserListResponse +} \ No newline at end of file diff --git a/Week2/app/src/main/java/com/example/week2/ShoppingcartFragment.kt b/Week3/app/src/main/java/com/example/week3/ShoppingcartFragment.kt similarity index 91% rename from Week2/app/src/main/java/com/example/week2/ShoppingcartFragment.kt rename to Week3/app/src/main/java/com/example/week3/ShoppingcartFragment.kt index 4b3f85e..f5c1007 100644 --- a/Week2/app/src/main/java/com/example/week2/ShoppingcartFragment.kt +++ b/Week3/app/src/main/java/com/example/week3/ShoppingcartFragment.kt @@ -1,4 +1,4 @@ -package com.example.week2 +package com.example.week3 import android.os.Bundle import android.view.LayoutInflater @@ -8,7 +8,9 @@ import androidx.fragment.app.Fragment import android.widget.Button import androidx.navigation.fragment.findNavController import androidx.navigation.NavOptions +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class ShoppingcartFragment : Fragment() { override fun onCreateView( diff --git a/Week3/app/src/main/java/com/example/week3/WishlistFragment.kt b/Week3/app/src/main/java/com/example/week3/WishlistFragment.kt new file mode 100644 index 0000000..b090041 --- /dev/null +++ b/Week3/app/src/main/java/com/example/week3/WishlistFragment.kt @@ -0,0 +1,43 @@ +package com.example.week3 + +import android.os.Bundle +import android.view.View +import androidx.fragment.app.Fragment +import androidx.recyclerview.widget.GridLayoutManager +import com.example.week3.databinding.FragmentWishlistBinding +import dagger.hilt.android.AndroidEntryPoint +import androidx.fragment.app.viewModels + +@AndroidEntryPoint +class WishlistFragment : Fragment(R.layout.fragment_wishlist) { + private var _binding: FragmentWishlistBinding? = null + private val binding get() = _binding!! + + private val viewModel: MainViewModel by viewModels() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + _binding = FragmentWishlistBinding.bind(view) + + val productAdapter = ProductAdapter { clickedItem -> + viewModel.toggleWishStatus(clickedItem.id) + } + + binding.recyclerWish.apply { + adapter = productAdapter + layoutManager = GridLayoutManager(requireContext(), 2) + } + + viewModel.productList.observe(viewLifecycleOwner) { allProducts -> + val wishList = allProducts.filter { it.isWished } + productAdapter.submitList(wishList) + } + + viewModel.fetchLocalProducts() + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } +} \ No newline at end of file diff --git a/Week3/app/src/main/java/com/example/week3/di/LocalModule.kt b/Week3/app/src/main/java/com/example/week3/di/LocalModule.kt new file mode 100644 index 0000000..3663758 --- /dev/null +++ b/Week3/app/src/main/java/com/example/week3/di/LocalModule.kt @@ -0,0 +1,19 @@ +package com.example.week3.di + +import android.content.Context +import com.google.gson.Gson +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object LocalModule { + + @Provides + @Singleton + fun provideGson(): Gson = Gson() +} \ No newline at end of file diff --git a/Week3/app/src/main/java/com/example/week3/di/NetworkModule.kt b/Week3/app/src/main/java/com/example/week3/di/NetworkModule.kt new file mode 100644 index 0000000..6e8b860 --- /dev/null +++ b/Week3/app/src/main/java/com/example/week3/di/NetworkModule.kt @@ -0,0 +1,45 @@ +package com.example.week3.di + +import com.example.week3.ReqResService +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory +import javax.inject.Singleton +import okhttp3.OkHttpClient + +@Module +@InstallIn(SingletonComponent::class) +object NetworkModule { + + @Provides + @Singleton + fun provideOkHttpClient(): OkHttpClient { + return OkHttpClient.Builder() + .addInterceptor { chain -> + val request = chain.request().newBuilder() + .header("x-api-key", "reqres_286fae62df9643f089a91de5a72a2ef4") + .build() + chain.proceed(request) + } + .build() + } + + @Provides + @Singleton + fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit { + return Retrofit.Builder() + .baseUrl("https://reqres.in/") + .client(okHttpClient) + .addConverterFactory(GsonConverterFactory.create()) + .build() + } + + @Provides + @Singleton + fun provideReqResService(retrofit: Retrofit): ReqResService { + return retrofit.create(ReqResService::class.java) + } +} \ No newline at end of file diff --git a/Week3/app/src/main/res/color/wish_heart_tint.xml b/Week3/app/src/main/res/color/wish_heart_tint.xml new file mode 100644 index 0000000..42fea8a --- /dev/null +++ b/Week3/app/src/main/res/color/wish_heart_tint.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Week3/app/src/main/res/drawable/bg_circle.xml b/Week3/app/src/main/res/drawable/bg_circle.xml new file mode 100644 index 0000000..36845a7 --- /dev/null +++ b/Week3/app/src/main/res/drawable/bg_circle.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/Week2/app/src/main/res/drawable/ic_bag_simple.png b/Week3/app/src/main/res/drawable/ic_bag_simple.png similarity index 100% rename from Week2/app/src/main/res/drawable/ic_bag_simple.png rename to Week3/app/src/main/res/drawable/ic_bag_simple.png diff --git a/Week3/app/src/main/res/drawable/ic_event.xml b/Week3/app/src/main/res/drawable/ic_event.xml new file mode 100644 index 0000000..94d16b8 --- /dev/null +++ b/Week3/app/src/main/res/drawable/ic_event.xml @@ -0,0 +1,9 @@ + + + diff --git a/Week2/app/src/main/res/drawable/ic_heart_straight.png b/Week3/app/src/main/res/drawable/ic_heart_straight.png similarity index 100% rename from Week2/app/src/main/res/drawable/ic_heart_straight.png rename to Week3/app/src/main/res/drawable/ic_heart_straight.png diff --git a/Week2/app/src/main/res/drawable/ic_house_simple.png b/Week3/app/src/main/res/drawable/ic_house_simple.png similarity index 100% rename from Week2/app/src/main/res/drawable/ic_house_simple.png rename to Week3/app/src/main/res/drawable/ic_house_simple.png diff --git a/Week2/app/src/main/res/drawable/ic_launcher_background.xml b/Week3/app/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from Week2/app/src/main/res/drawable/ic_launcher_background.xml rename to Week3/app/src/main/res/drawable/ic_launcher_background.xml diff --git a/Week2/app/src/main/res/drawable/ic_launcher_foreground.xml b/Week3/app/src/main/res/drawable/ic_launcher_foreground.xml similarity index 100% rename from Week2/app/src/main/res/drawable/ic_launcher_foreground.xml rename to Week3/app/src/main/res/drawable/ic_launcher_foreground.xml diff --git a/Week2/app/src/main/res/drawable/ic_list_magnifying_glass.png b/Week3/app/src/main/res/drawable/ic_list_magnifying_glass.png similarity index 100% rename from Week2/app/src/main/res/drawable/ic_list_magnifying_glass.png rename to Week3/app/src/main/res/drawable/ic_list_magnifying_glass.png diff --git a/Week3/app/src/main/res/drawable/ic_order.xml b/Week3/app/src/main/res/drawable/ic_order.xml new file mode 100644 index 0000000..366915e --- /dev/null +++ b/Week3/app/src/main/res/drawable/ic_order.xml @@ -0,0 +1,9 @@ + + + diff --git a/Week3/app/src/main/res/drawable/ic_pass.xml b/Week3/app/src/main/res/drawable/ic_pass.xml new file mode 100644 index 0000000..389538c --- /dev/null +++ b/Week3/app/src/main/res/drawable/ic_pass.xml @@ -0,0 +1,9 @@ + + + diff --git a/Week3/app/src/main/res/drawable/ic_setting.xml b/Week3/app/src/main/res/drawable/ic_setting.xml new file mode 100644 index 0000000..a96868e --- /dev/null +++ b/Week3/app/src/main/res/drawable/ic_setting.xml @@ -0,0 +1,9 @@ + + + diff --git a/Week2/app/src/main/res/drawable/ic_user.png b/Week3/app/src/main/res/drawable/ic_user.png similarity index 100% rename from Week2/app/src/main/res/drawable/ic_user.png rename to Week3/app/src/main/res/drawable/ic_user.png diff --git a/Week3/app/src/main/res/drawable/ic_wish_heart.xml b/Week3/app/src/main/res/drawable/ic_wish_heart.xml new file mode 100644 index 0000000..13508a9 --- /dev/null +++ b/Week3/app/src/main/res/drawable/ic_wish_heart.xml @@ -0,0 +1,13 @@ + + + diff --git a/Week3/app/src/main/res/drawable/ic_wish_heart_fill.xml b/Week3/app/src/main/res/drawable/ic_wish_heart_fill.xml new file mode 100644 index 0000000..9d7cc1b --- /dev/null +++ b/Week3/app/src/main/res/drawable/ic_wish_heart_fill.xml @@ -0,0 +1,13 @@ + + + diff --git a/Week3/app/src/main/res/drawable/image1.png b/Week3/app/src/main/res/drawable/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..286ad637b0d58faa0586158e5ced1147b18a3caf GIT binary patch literal 45806 zcmeEtQ+H+G)AdPCY}>YN+h)hMot(JibZk56usgQZvD2}Qj``&Geu($#f3e0MwJ!D; zyH?eznse5UQc;pdgu{aa004-xG7@S402tqY3kK?ICqgXG;OhbFETiiN0KlXFx4-~d zIXGXNU~X#CVu0Eyf|D-;!b((86aZ*QfPXWA{IZeUC3W1@oh;qGOk6DhQZ`l&CV35M zW&l8=jjV*IhBw$n7c|IF+k>fdsx82`?$of6K{v^7gmB(L4sHydvXg@OpfoWIWlsF* zUr)*>stgR{FBP$R7nVO8!_D>+ie2eHIJ&0)243-gzASCN{$=0$5&T$BQTxaiYI!O6 ze*S*p%`@QHrC5j;HJ|JThqpG5soTO&*ugY- zDjJiq`y*%ztX{G*UUp;QCiJc?;e%1I>s>V~FRMg`LTt!2v*yiRHl;?#Cp88bamcgJ z%Nk8>;41HfC(s%CHtQ1I1h@W;X5Oju(JVqhCoCpkqaHQ&&FygK` z8}7uw&raL$!e|5T{?BQKS{C_}!T}EdT>xt6##Yez{K8s8PP2hOFXHs%%*NKUQ0_5t z!BxPc-@@XCxP_%B)^Q-;Ab4)7b{&fhB^oRq4sNkizyP1ZcKRqpAdpB@7BIc65q46gKe8tw>|kJj&$<)yS|-t46_ez-|7CcF?OA?whN5`Rp_E(wXgn zCb_ZetaS=ez&UICZB_M&^2dYv-R_V1lnT2dyoW}lJRwD!<{{o$n4x4?vE!Vp#^jI- zFG)|K6w7({iLAI^@3nPvhDI+GgquB~yA5H#=if2@i;_Axux#LHz)g%%N&f3OOt7LM?`XDC{oH#y$S^G9 zx+h#LSgn$0NR3m2SYAz8oc;apPwn}nVZOD-l4O4&t*Yu|D&2I4RZslqAvVdPH1?cn z(>Qpos&4>SKhLYet+zj0B}+?MU_2mVfP=d`2Ml`O7N9qkUi)^Mt;z&s_p`eEZji(9 zmkqANW^0zG|B1fF{HBycXOOxwcP@|r_oW(ranz=NS+|Y4-D!eOU+0QGZu5?o~ zT;Hd4ZgndwY{enF3Y&jJ`{jD0j6PV$Q|b-=>vEdW4P&CsPFqT^$miHB|2*a@t;KI&;!`r*N_c; z4(rWvNW?-6>&puZGYbnCm@$%i4W^KW{x?G@RkE_-NsZcA{JA4l)=@2tH$5(vLG$18 zh=Lw)x=cQ8Y~xa__xDLWmKM~+&47|}^Bl85iKo6?w}Fx&`Afr#xkjd%+VsL6rXa*q zY7y8|>cB}a70tc{$MzGd(~FBz$r!ALtX0{qkB1f;UthgmXH(MN7tC&mmLUκd9cI!W)&*-XYhrC-BJxI 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 literal 0 HcmV?d00001 diff --git a/Week3/app/src/main/res/drawable/image2.png b/Week3/app/src/main/res/drawable/image2.png new file mode 100644 index 0000000000000000000000000000000000000000..18a863fd8f5c5eb1850100f97eb9c1622c29c05c GIT binary patch literal 13308 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 literal 0 HcmV?d00001 diff --git a/Week3/app/src/main/res/drawable/img_avatar.png b/Week3/app/src/main/res/drawable/img_avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..5a8869e1b2c8145f262ee753ec52bdf0a4b6a237 GIT binary patch literal 1374 zcmV-k1)=(hP)xctkt6>|jHHn)+wVKak>tpZb#veRY38X!1>oV~ zp@NN#SH-fdwXd%)KIRvdN~KEhTpV{kKR-LzZR6F!xxetb!+Y(mt*tv6GbI`W&1SQ_ zw6t`D-5m&MLy$5VK#A?*`)+aQZftC{DQ9vMG$7(0F5IRZfUqp?73C;y=7J)eZETL_ z=H~WHIWZv(xc4k;VKWnyg@hAN^KxShG8NXipj^SATs+6_J{6lxgf%K?tJPvh9*;S+ zl)1=82lVL+N@9*!ADJ7{K`tg>|d%F|!qwxiug7Q)q?#>>>Emva+s>J+3 zs-Har#ICHgD}(|f^xY@vsI((Qb*)EVShO?Z5v5Zt%TP z4s}S-0xh7^!T0(cD(;NWpi2iG>W~l%81OK7+;gb7Gcldl*Vn2)b{cf3O+pgNi;Ig# z{y|Sr^w$qbNW}d7{GPw>g}j7&dJy)j9QM9LZ4y%9hrK5#!oBFTJPHrbBJ{TEV26ZM zz?7bbCEQ!DV~DOvLTb>+uUcxhuwVw;f~vE4<1H&H7GhrnH3Y8@;7VzQ1S6pMtg@h0 z5{!UoUxQ06ai~EoxvOcEO6m!>LO&v?VMI{Fa2fiW1XFaxp=R*}m4RhLaI{Ovo5gcz zn*<~9x_uGUAikh32}a>=oX>s`vPta<$+TjJGBqV~v-Jc%b>w2Oby(J+L5VYa%_XOpz=e$QGB*FD} zdV+G;s{~R)3}C`Wa5YHZXcNM|K|(CL-ELp@hdx1huDDcA`V6|085$2AR9pyWlvYE6 zvP*Gm`G$l@M!Az2Ib#3u@o^$Gel%f`JW^0r9v`?QA&k%zZ;|WeF$%?N13l%$J8L3;ke# zAVn3HYjC`r!30*O$m8KEV;5Fcnl~6dyUI$)-oHgT;Xi~57kA_@*3TL>f$Iis%0`kl zWfF1|G>9)QoV(BBntVW&3TZb_5&M1v6#$i0qQYzUA#z;_%tgh@pxA*m0c{A#UEwzU gn}t1=CwvX^7fx4BQbvI9JOBUy07*qoM6N<$f?oY|;{X5v literal 0 HcmV?d00001 diff --git a/Week2/app/src/main/res/drawable/img_bag_circle.png b/Week3/app/src/main/res/drawable/img_bag_circle.png similarity index 100% rename from Week2/app/src/main/res/drawable/img_bag_circle.png rename to Week3/app/src/main/res/drawable/img_bag_circle.png diff --git a/Week2/app/src/main/res/drawable/img_home.png b/Week3/app/src/main/res/drawable/img_home.png similarity index 100% rename from Week2/app/src/main/res/drawable/img_home.png rename to Week3/app/src/main/res/drawable/img_home.png diff --git a/Week3/app/src/main/res/drawable/img_nemo.png b/Week3/app/src/main/res/drawable/img_nemo.png new file mode 100644 index 0000000000000000000000000000000000000000..62dbd5faf2c199720a00bf9fd5ea4b1544db92ae GIT binary patch literal 386 zcmeAS@N?(olHy`uVBq!ia0vp^*+87d!3HFEKVH8QNO2Z;L>4nJa0`PlBg3pY55jgR3=A9lx&I`x0{MI;t`Q}{`DrEPiAAXlZkg%1iSss2O9smP z^>lFzsbGA2k&%}{f#<-6=KAJvW~*si#Hz}^^KzD-m>{a8?Go0pMj%pglT%9T39gC5 bNZ==%CQF=m;axspKrnc^`njxgN@xNAWfFTC literal 0 HcmV?d00001 diff --git a/Week2/app/src/main/res/layout/activity_main.xml b/Week3/app/src/main/res/layout/activity_main.xml similarity index 68% rename from Week2/app/src/main/res/layout/activity_main.xml rename to Week3/app/src/main/res/layout/activity_main.xml index 2fadf6a..8ef1a34 100644 --- a/Week2/app/src/main/res/layout/activity_main.xml +++ b/Week3/app/src/main/res/layout/activity_main.xml @@ -1,10 +1,12 @@ - - diff --git a/Week2/app/src/main/res/layout/fragment_buy.xml b/Week3/app/src/main/res/layout/fragment_buy.xml similarity index 92% rename from Week2/app/src/main/res/layout/fragment_buy.xml rename to Week3/app/src/main/res/layout/fragment_buy.xml index eec5e44..1c19b9a 100644 --- a/Week2/app/src/main/res/layout/fragment_buy.xml +++ b/Week3/app/src/main/res/layout/fragment_buy.xml @@ -3,7 +3,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:orientation="vertical"> + android:orientation="vertical" + android:background="@color/white"> + + + + + \ No newline at end of file diff --git a/Week2/app/src/main/res/layout/fragment_buy_shoes.xml b/Week3/app/src/main/res/layout/fragment_buy_shoes.xml similarity index 80% rename from Week2/app/src/main/res/layout/fragment_buy_shoes.xml rename to Week3/app/src/main/res/layout/fragment_buy_shoes.xml index 992bf78..3310555 100644 --- a/Week2/app/src/main/res/layout/fragment_buy_shoes.xml +++ b/Week3/app/src/main/res/layout/fragment_buy_shoes.xml @@ -1,7 +1,8 @@ + android:layout_height="match_parent" + android:background="@color/white"> + android:layout_height="match_parent" + android:background="@color/white"> + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Week3/app/src/main/res/layout/fragment_profile.xml b/Week3/app/src/main/res/layout/fragment_profile.xml new file mode 100644 index 0000000..8135611 --- /dev/null +++ b/Week3/app/src/main/res/layout/fragment_profile.xml @@ -0,0 +1,190 @@ + + + + + + + + + +