From 0ac8af192d25e753422d2aa52e4c8f15c5f400f7 Mon Sep 17 00:00:00 2001 From: deephoon Date: Thu, 14 Nov 2024 23:58:35 +0900 Subject: [PATCH 1/7] build Error --- .idea/runConfigurations.xml | 17 + app/src/main/res/layout/fragment_locker.xml | 100 ++++ app/src/main/res/layout/fragment_look.xml | 514 +++++++++++++++++++- app/src/main/res/layout/fragment_search.xml | 14 +- gradle/libs.versions.toml | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 6 files changed, 642 insertions(+), 7 deletions(-) create mode 100644 .idea/runConfigurations.xml diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..16660f1 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_locker.xml b/app/src/main/res/layout/fragment_locker.xml index 77d9ef6..f8acfb1 100644 --- a/app/src/main/res/layout/fragment_locker.xml +++ b/app/src/main/res/layout/fragment_locker.xml @@ -1,6 +1,106 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_look.xml b/app/src/main/res/layout/fragment_look.xml index 77d9ef6..31b020c 100644 --- a/app/src/main/res/layout/fragment_look.xml +++ b/app/src/main/res/layout/fragment_look.xml @@ -1,6 +1,516 @@ - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_search.xml b/app/src/main/res/layout/fragment_search.xml index 77d9ef6..f53cecf 100644 --- a/app/src/main/res/layout/fragment_search.xml +++ b/app/src/main/res/layout/fragment_search.xml @@ -1,6 +1,14 @@ - + android:layout_height="match_parent" + tools:context=".SearchFragment"> - \ No newline at end of file + + + + \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 36598ff..4030012 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -agp = "8.5.1" +agp = "8.7.2" kotlin = "1.9.0" coreKtx = "1.13.1" junit = "4.13.2" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c10190b..1150b46 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue Sep 24 20:15:58 KST 2024 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From def6feb6497fd4f1519bd2ccc7187a3e632c3875 Mon Sep 17 00:00:00 2001 From: deephoon Date: Mon, 18 Nov 2024 18:36:11 +0900 Subject: [PATCH 2/7] seekbar --- app/build.gradle.kts | 6 +- app/src/main/AndroidManifest.xml | 2 +- .../java/umc/study/umc_7th/AlbumFragment.kt | 7 + .../java/umc/study/umc_7th/BannerFragment.kt | 29 + .../java/umc/study/umc_7th/BannerVPAdapter.kt | 22 + .../java/umc/study/umc_7th/HomeFragment.kt | 34 +- .../java/umc/study/umc_7th/MainActivity.kt | 20 + .../java/umc/study/umc_7th/PannelFragment.kt | 27 + .../java/umc/study/umc_7th/SongActivity.kt | 40 + app/src/main/res/drawable/blue_radius.xml | 6 + app/src/main/res/drawable/gray_radius.xml | 6 + app/src/main/res/drawable/memo.xml | 4 + app/src/main/res/layout/fragment_banner.xml | 18 + app/src/main/res/layout/fragment_home.xml | 844 ++++++++++++++---- app/src/main/res/layout/fragment_pannel.xml | 18 + app/src/main/res/layout/item_album.xml | 63 ++ app/src/main/res/values/themes.xml | 2 +- build.gradle.kts | 1 + gradle/libs.versions.toml | 2 +- 19 files changed, 995 insertions(+), 156 deletions(-) create mode 100644 app/src/main/java/umc/study/umc_7th/BannerFragment.kt create mode 100644 app/src/main/java/umc/study/umc_7th/BannerVPAdapter.kt create mode 100644 app/src/main/java/umc/study/umc_7th/PannelFragment.kt create mode 100644 app/src/main/res/drawable/blue_radius.xml create mode 100644 app/src/main/res/drawable/gray_radius.xml create mode 100644 app/src/main/res/drawable/memo.xml create mode 100644 app/src/main/res/layout/fragment_banner.xml create mode 100644 app/src/main/res/layout/fragment_pannel.xml create mode 100644 app/src/main/res/layout/item_album.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6479977..49efaf1 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -11,7 +11,7 @@ plugins { android { namespace = "umc.study.umc_7th" - compileSdk = 34 + compileSdk = 35 defaultConfig { applicationId = "umc.study.umc_7th" @@ -48,7 +48,7 @@ android { compose = true } composeOptions { - kotlinCompilerExtensionVersion = "1.5.1" + kotlinCompilerExtensionVersion = "1.5.13" } packaging { resources { @@ -86,6 +86,8 @@ dependencies { implementation(libs.androidx.navigation.fragment.ktx) implementation(libs.androidx.navigation.ui.ktx) + implementation ("me.relex:circleindicator:2.1.6") + implementation ("androidx.viewpager2:viewpager2:1.0.0") // Hilt Dependency Injection implementation("com.google.dagger:hilt-android:2.49") kapt("com.google.dagger:hilt-compiler:2.49") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0318547..52a13bb 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ \ + xmlns:tools="http://schemas.android.com/tools"> diff --git a/app/src/main/java/umc/study/umc_7th/AlbumFragment.kt b/app/src/main/java/umc/study/umc_7th/AlbumFragment.kt index b0c3ca1..1bc6dd2 100644 --- a/app/src/main/java/umc/study/umc_7th/AlbumFragment.kt +++ b/app/src/main/java/umc/study/umc_7th/AlbumFragment.kt @@ -4,6 +4,7 @@ import android.view.View import android.view.ViewGroup import android.widget.Toast import androidx.fragment.app.Fragment +import androidx.fragment.app.setFragmentResultListener import umc.study.umc_7th.HomeFragment import umc.study.umc_7th.MainActivity import umc.study.umc_7th.R @@ -19,6 +20,12 @@ class AlbumFragment : Fragment() { savedInstanceState: Bundle? ): View? { binding = FragmentAlbumBinding.inflate(inflater,container,false) + setFragmentResultListener("TitleInfo") { requestKey, bundle -> + binding.albumMusicTitleTv.text = bundle.getString("title") + } + setFragmentResultListener("SingerInfo") { requestKey, bundle -> + binding.albumSingerNameTv.text = bundle.getString("singer") + } binding.albumBackIv.setOnClickListener { (context as MainActivity).supportFragmentManager.beginTransaction() diff --git a/app/src/main/java/umc/study/umc_7th/BannerFragment.kt b/app/src/main/java/umc/study/umc_7th/BannerFragment.kt new file mode 100644 index 0000000..3cd96c9 --- /dev/null +++ b/app/src/main/java/umc/study/umc_7th/BannerFragment.kt @@ -0,0 +1,29 @@ +package umc.study.umc_7th + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import umc.study.umc_7th.databinding.FragmentBannerBinding + +class BannerFragment(val imgRes : Int) : Fragment() { + + lateinit var binding : FragmentBannerBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + binding = FragmentBannerBinding.inflate(inflater, container, false) + binding.bannerImageIv.setImageResource(imgRes) + return binding.root + } + + +} \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/BannerVPAdapter.kt b/app/src/main/java/umc/study/umc_7th/BannerVPAdapter.kt new file mode 100644 index 0000000..78e400f --- /dev/null +++ b/app/src/main/java/umc/study/umc_7th/BannerVPAdapter.kt @@ -0,0 +1,22 @@ +package umc.study.umc_7th + +import androidx.fragment.app.Fragment +import androidx.viewpager2.adapter.FragmentStateAdapter + +class BannerVPAdapter(fragment : Fragment) : FragmentStateAdapter(fragment) { + + private val fragmentList : ArrayList = ArrayList() + + override fun getItemCount(): Int { + return fragmentList.size + } + + override fun createFragment(position: Int): Fragment { + return fragmentList[position] + } + + fun addFragment(fragment: Fragment) { + fragmentList.add(fragment) + notifyItemInserted(fragmentList.size-1) + } +} \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/HomeFragment.kt b/app/src/main/java/umc/study/umc_7th/HomeFragment.kt index 2889fa0..7ab31f8 100644 --- a/app/src/main/java/umc/study/umc_7th/HomeFragment.kt +++ b/app/src/main/java/umc/study/umc_7th/HomeFragment.kt @@ -5,7 +5,10 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.os.bundleOf import androidx.fragment.app.Fragment +import androidx.fragment.app.setFragmentResult +import androidx.viewpager2.widget.ViewPager2 import umc.study.umc_7th.databinding.FragmentHomeBinding class HomeFragment : Fragment() { @@ -22,10 +25,37 @@ class HomeFragment : Fragment() { ): View? { binding = FragmentHomeBinding.inflate(inflater, container, false) - binding.homePannelAlbumImgIv.setOnClickListener { - (context as MainActivity).supportFragmentManager.beginTransaction().replace(R.id.main_frm, AlbumFragment()).commitAllowingStateLoss() + binding.homePannelAlbumImg01Iv.setOnClickListener { + val bundle = Bundle() + bundle.putString("tilte", binding.titleLilacTv.text.toString()) + bundle.putString("singer", binding.singerIuTv.text.toString()) + bundle.putString("img", binding.homeDailyMusicAlbumImg01Iv.toString()) + + val albumFragment = AlbumFragment() + albumFragment.arguments = bundle + + (context as MainActivity) + .supportFragmentManager.beginTransaction() + .replace(R.id.main_frm, AlbumFragment()).commitAllowingStateLoss() + + val pannelAdpater = PannelVpAdapter(this) + pannelAdpater.addFragment(PannelFragment(R.drawable.img_first_album_default)) + pannelAdpater.addFragment(PannelFragment(R.drawable.img_first_album_default)) + binding.homePannelBackgroundVp.adapter = pannelAdpater + binding.homePannelBackgroundVp.orientation = ViewPager2.ORIENTATION_HORIZONTAL + + return binding.root + } + + + binding.homeDailyMusicAlbumImg01Iv.setOnClickListener(){ + setFragmentResult("TitleInfo", bundleOf("title" to binding.titleLilacTv.text.toString())) + setFragmentResult("SingerInfo", bundleOf("singer" to binding.singerIuTv.text.toString())) } return binding.root } + + + } \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/MainActivity.kt b/app/src/main/java/umc/study/umc_7th/MainActivity.kt index 6369cb5..1a29931 100644 --- a/app/src/main/java/umc/study/umc_7th/MainActivity.kt +++ b/app/src/main/java/umc/study/umc_7th/MainActivity.kt @@ -2,11 +2,17 @@ package umc.study.umc_7th import android.content.Intent import android.os.Bundle +import android.util.Log +import android.widget.Toast +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AppCompatActivity +import androidx.compose.ui.tooling.animation.ToolingState import umc.study.umc_7th.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { + lateinit var activityResultLauncher: ActivityResultLauncher lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { @@ -18,8 +24,22 @@ class MainActivity : AppCompatActivity() { val song = Song(binding.mainMiniplayerTitleTv.text.toString(), binding.mainMiniplayerSingerTv.text.toString()) + activityResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == RESULT_OK) { + val data = result.data + if(data != null) { + val message = data.getStringExtra("message") + Log.d("message", message!!) + Toast.makeText(this, message, Toast.LENGTH_SHORT).show() + } + } + + } binding.mainPlayerCl.setOnClickListener { val intent = Intent(this, SongActivity::class.java) + intent.putExtra("title", song.title) + intent.putExtra("singer", song.singer) + activityResultLauncher.launch(intent) } binding.mainPlayerCl.setOnClickListener { diff --git a/app/src/main/java/umc/study/umc_7th/PannelFragment.kt b/app/src/main/java/umc/study/umc_7th/PannelFragment.kt new file mode 100644 index 0000000..83ede96 --- /dev/null +++ b/app/src/main/java/umc/study/umc_7th/PannelFragment.kt @@ -0,0 +1,27 @@ +package umc.study.umc_7th + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import umc.study.umc_7th.databinding.FragmentPannelBinding + +class PannelFragment(val imgRes : Int) : Fragment() { + + lateinit var binding : FragmentPannelBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + binding = FragmentPannelBinding.inflate(inflater, container, false) + binding.pannelImageIv.setImageResource(imgRes) + return binding.root + } +} \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/SongActivity.kt b/app/src/main/java/umc/study/umc_7th/SongActivity.kt index b8b359e..5ce9152 100644 --- a/app/src/main/java/umc/study/umc_7th/SongActivity.kt +++ b/app/src/main/java/umc/study/umc_7th/SongActivity.kt @@ -1,15 +1,55 @@ package umc.study.umc_7th +import android.content.Intent import android.os.Bundle +import android.view.View import androidx.appcompat.app.AppCompatActivity import umc.study.umc_7th.databinding.ActivitySongBinding class SongActivity : AppCompatActivity() { + lateinit var binding: ActivitySongBinding + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivitySongBinding.inflate(layoutInflater) setContentView(binding.root) // 여기다가 XML 넣는거임 + + var title : String? = null + var singer : String? = null + + if(intent.hasExtra("title") && intent.hasExtra("Singer")){ + // hasExtra: intent에 title 또는 singer 라는 이름의 데이터가 있는 지 확인 후 T/F 반환 + binding.songMusicTitleTv.text = intent.getStringExtra("title") + binding.songSingerNameTv.text = intent.getStringExtra("Singer") + binding.songMusicTitleTv.text = title + binding.songSingerNameTv.text = singer + + } + + binding.songDownIb.setOnClickListener { + val intent = Intent(this, MainActivity::class.java) + intent.putExtra("message", title + " _ " + singer) + setResult(RESULT_OK, intent) + finish() + } + binding.songMiniplayerIv.setOnClickListener{ + setPlayerStatus(true) + } + binding.songPauseIv.setOnClickListener{ + setPlayerStatus(false) + } + } + + fun setPlayerStatus (isPlaying : Boolean){ + if(isPlaying){ + binding.songMiniplayerIv.visibility = View.GONE + binding.songPauseIv.visibility = View.VISIBLE + } + else{ + binding.songMiniplayerIv.visibility = View.VISIBLE + binding.songPauseIv.visibility = View.GONE + } } } \ No newline at end of file diff --git a/app/src/main/res/drawable/blue_radius.xml b/app/src/main/res/drawable/blue_radius.xml new file mode 100644 index 0000000..f2a12db --- /dev/null +++ b/app/src/main/res/drawable/blue_radius.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/gray_radius.xml b/app/src/main/res/drawable/gray_radius.xml new file mode 100644 index 0000000..5b9a17d --- /dev/null +++ b/app/src/main/res/drawable/gray_radius.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/memo.xml b/app/src/main/res/drawable/memo.xml new file mode 100644 index 0000000..a8b409b --- /dev/null +++ b/app/src/main/res/drawable/memo.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_banner.xml b/app/src/main/res/layout/fragment_banner.xml new file mode 100644 index 0000000..37c2ef8 --- /dev/null +++ b/app/src/main/res/layout/fragment_banner.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 13292ae..0f91720 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -1,154 +1,700 @@ - + - + android:layout_height="match_parent" + tools:context=".HomeFragment"> - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + android:layout_height="wrap_content"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_pannel.xml b/app/src/main/res/layout/fragment_pannel.xml new file mode 100644 index 0000000..e2f6f9e --- /dev/null +++ b/app/src/main/res/layout/fragment_pannel.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_album.xml b/app/src/main/res/layout/item_album.xml new file mode 100644 index 0000000..de8cff1 --- /dev/null +++ b/app/src/main/res/layout/item_album.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index e3f0cdd..6b8cdb4 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,5 +1,5 @@ - \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0cd37b1..ef4f7c2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -20,6 +20,7 @@ constraintlayoutCompose = "1.0.1" storage = "1.5.0" lifecycleRuntimeComposeAndroid = "2.8.6" common = "0.10.0" +firebaseFirestoreKtx = "25.1.1" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } @@ -48,6 +49,7 @@ androidx-constraintlayout-compose = { group = "androidx.constraintlayout", name androidx-storage = { group = "androidx.test.services", name = "storage", version.ref = "storage" } androidx-lifecycle-runtime-compose-android = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose-android", version.ref = "lifecycleRuntimeComposeAndroid" } common = { group = "com.google.ai.client.generativeai", name = "common", version.ref = "common" } +firebase-firestore-ktx = { group = "com.google.firebase", name = "firebase-firestore-ktx", version.ref = "firebaseFirestoreKtx" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } From be22aa953e24e60a44588eb9c89d9f8a990f490b Mon Sep 17 00:00:00 2001 From: deephoon Date: Tue, 19 Nov 2024 17:54:35 +0900 Subject: [PATCH 4/7] #43-Token --- .../java/umc/study/umc_7th/AlbumFragment.kt | 5 +- .../java/umc/study/umc_7th/LoginActivity.kt | 51 +--- .../java/umc/study/umc_7th/MainActivity.kt | 184 +++++++++++- .../java/umc/study/umc_7th/SignUpActivity.kt | 53 ++++ .../main/java/umc/study/umc_7th/SongDao.kt | 7 - .../java/umc/study/umc_7th/SongDatabase.kt | 6 +- app/src/main/res/layout/activity_login.xml | 284 ++++++++++++++++++ app/src/main/res/layout/activity_sign_up.xml | 222 ++++++++++++++ 8 files changed, 751 insertions(+), 61 deletions(-) create mode 100644 app/src/main/java/umc/study/umc_7th/SignUpActivity.kt create mode 100644 app/src/main/res/layout/activity_login.xml create mode 100644 app/src/main/res/layout/activity_sign_up.xml diff --git a/app/src/main/java/umc/study/umc_7th/AlbumFragment.kt b/app/src/main/java/umc/study/umc_7th/AlbumFragment.kt index ea49ee8..1910120 100644 --- a/app/src/main/java/umc/study/umc_7th/AlbumFragment.kt +++ b/app/src/main/java/umc/study/umc_7th/AlbumFragment.kt @@ -1,3 +1,6 @@ +package umc.study.umc_7th + + import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -56,7 +59,7 @@ class AlbumFragment : Fragment() { .commitAllowingStateLoss() } - val albumAdapter = AlbumRVAdapter(this) + val albumAdapter = AlbumVPAdapter(this) binding.albumContentVp.adapter = albumAdapter TabLayoutMediator(binding.albumContentTb, binding.albumContentVp) { tab, position -> diff --git a/app/src/main/java/umc/study/umc_7th/LoginActivity.kt b/app/src/main/java/umc/study/umc_7th/LoginActivity.kt index 1e6eb9b..0fb9273 100644 --- a/app/src/main/java/umc/study/umc_7th/LoginActivity.kt +++ b/app/src/main/java/umc/study/umc_7th/LoginActivity.kt @@ -2,10 +2,12 @@ package umc.study.umc_7th import android.content.Intent import android.os.Bundle +import android.util.Log import android.widget.Toast import androidx.appcompat.app.AppCompatActivity +import umc.study.umc_7th.databinding.ActivityLoginBinding -class LoginActivity : AppCompatActivity(), LoginView { +class LoginActivity : AppCompatActivity() { lateinit var binding : ActivityLoginBinding @@ -14,16 +16,17 @@ class LoginActivity : AppCompatActivity(), LoginView { binding = ActivityLoginBinding.inflate(layoutInflater) setContentView(binding.root) + binding.loginSignInBtn.setOnClickListener { + login() + } binding.loginSignUpTv.setOnClickListener { val intent = Intent(this, SignUpActivity::class.java) startActivity(intent) } - binding.loginSignInBtn.setOnClickListener { - login() - } } + private fun login() { if (binding.loginIdEt.text.toString().isEmpty() || binding.loginDirectInputEt.text.toString().isEmpty()) { Toast.makeText(this, "이메일을 입력해주세요", Toast.LENGTH_SHORT).show() @@ -38,21 +41,16 @@ class LoginActivity : AppCompatActivity(), LoginView { val email : String = binding.loginIdEt.text.toString() + "@" + binding.loginDirectInputEt.text.toString() val pwd : String = binding.loginPasswordEt.text.toString() -// val songDB = SongDatabase.getInstance(this)!! -// val user = songDB.userDao().getUser(email, pwd) -// -// if (user != null) { -// Log.d("LoginActivity", user.id.toString()) -// saveJwt(user.id) -// startMainActivity() -// } else { -// Toast.makeText(this, "회원 정보가 존재하지 않습니다", Toast.LENGTH_SHORT).show() -// } + val songDB = SongDatabase.getInstance(this)!! + val user = songDB.userDao().getUser(email, pwd) - val authService = AuthService() - authService.setLoginView(this) - - authService.login(User(email, pwd, "")) + if (user != null) { + Log.d("LoginActivity", user.id.toString()) + saveJwt(user.id) + startMainActivity() + } else { + Toast.makeText(this, "회원 정보가 존재하지 않습니다", Toast.LENGTH_SHORT).show() + } } private fun saveJwt(jwt : Int) { @@ -63,25 +61,8 @@ class LoginActivity : AppCompatActivity(), LoginView { editor.apply() } - private fun saveJwtFromServer(jwt : String) { - val spf = getSharedPreferences("auth2", MODE_PRIVATE) - val editor = spf.edit() - - editor.putString("jwt", jwt) - editor.apply() - } - private fun startMainActivity() { val intent = Intent(this, MainActivity::class.java) startActivity(intent) } - - override fun onLoginSuccess(code : Int, result : Result) { - saveJwtFromServer(result.jwt) - startMainActivity() - } - - override fun onLoginFailure(message : String) { - Toast.makeText(this, message, Toast.LENGTH_SHORT).show() - } } \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/MainActivity.kt b/app/src/main/java/umc/study/umc_7th/MainActivity.kt index 8d47852..cb9918e 100644 --- a/app/src/main/java/umc/study/umc_7th/MainActivity.kt +++ b/app/src/main/java/umc/study/umc_7th/MainActivity.kt @@ -12,47 +12,66 @@ import umc.study.umc_7th.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { + lateinit var binding : ActivityMainBinding lateinit var activityResultLauncher: ActivityResultLauncher - lateinit var binding: ActivityMainBinding + + val songs = arrayListOf() + lateinit var songDB: SongDatabase + var nowPos = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + setTheme(R.style.Theme_Umc_7th) + binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) + inputDummySongs() + initPlayList() initBottomNavigation() - val song = Song(binding.mainMiniplayerTitleTv.text.toString(), binding.mainMiniplayerSingerTv.text.toString(), 0, 60, false) - activityResultLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> if (result.resultCode == RESULT_OK) { val data = result.data - if(data != null) { + if (data != null) { val message = data.getStringExtra("message") Log.d("message", message!!) Toast.makeText(this, message, Toast.LENGTH_SHORT).show() } } - - } - binding.mainPlayerCl.setOnClickListener { - val intent = Intent(this, SongActivity::class.java) - intent.putExtra("title", song.title) - intent.putExtra("singer", song.singer) - activityResultLauncher.launch(intent) } binding.mainPlayerCl.setOnClickListener { +// val intent = Intent(this, SongActivity::class.java) +// intent.putExtra("title", song.title) +// intent.putExtra("singer",song.singer) +// intent.putExtra("second", song.second) +// intent.putExtra("playTime", song.playTime) +// intent.putExtra("isPlaying", song.isPlaying) +// intent.putExtra("music", song.music) + val editor = getSharedPreferences("song", MODE_PRIVATE).edit() + editor.putInt("songId", songs[nowPos].id) + editor.apply() + val intent = Intent(this,SongActivity::class.java) - intent.putExtra("title", song.title) - intent.putExtra("singer",song.singer) - startActivity(intent) + activityResultLauncher.launch(intent) } + Log.d("MainActivity", getJwt().toString()) + } - private fun initBottomNavigation(){ + override fun onResume() { + super.onResume() + + val sharedPreferences = getSharedPreferences("song", MODE_PRIVATE) + val songId = sharedPreferences.getInt("songId", 0) + nowPos = getPlayingSongPosition(songId) + setMiniPlayer(songs[nowPos]) + } + + private fun initBottomNavigation() { supportFragmentManager.beginTransaction() .replace(R.id.main_frm, HomeFragment()) .commitAllowingStateLoss() @@ -73,12 +92,14 @@ class MainActivity : AppCompatActivity() { .commitAllowingStateLoss() return@setOnItemSelectedListener true } + R.id.searchFragment -> { supportFragmentManager.beginTransaction() .replace(R.id.main_frm, SearchFragment()) .commitAllowingStateLoss() return@setOnItemSelectedListener true } + R.id.lockerFragment -> { supportFragmentManager.beginTransaction() .replace(R.id.main_frm, LockerFragment()) @@ -89,4 +110,137 @@ class MainActivity : AppCompatActivity() { false } } + + private fun getPlayingSongPosition(songId: Int): Int{ + for (i in 0 until songs.size){ + if (songs[i].id == songId){ + return i + } + } + return 0 + } + + private fun initPlayList(){ + songDB = SongDatabase.getInstance(this)!! + songs.addAll(songDB.songDao().getSongs()) + } + + private fun setMiniPlayer(song : Song) { + binding.mainMiniplayerTitleTv.text = song.title + binding.mainMiniplayerSingerTv.text = song.singer + Log.d("songInfo", song.toString()) + val sharedPreferences = getSharedPreferences("song", MODE_PRIVATE) + val second = sharedPreferences.getInt("second", 0) + Log.d("spfSecond", second.toString()) + binding.mainMiniplayerProgressSb.progress = (second * 100000 / song.playTime) + } + + fun updateMainPlayerCl(album : Album) { + binding.mainMiniplayerTitleTv.text = album.title + binding.mainMiniplayerSingerTv.text = album.singer + binding.mainMiniplayerProgressSb.progress = 0 + } + + private fun inputDummySongs(){ + val songDB = SongDatabase.getInstance(this)!! + val songs = songDB.songDao().getSongs() + + if (songs.isNotEmpty()) return + + songDB.songDao().insert( + Song( + "Lilac", + "아이유 (IU)", + 0, + 200, + false, + "music_lilac", + R.drawable.img_album_exp2, + false, + 1 + ) + ) + + songDB.songDao().insert( + Song( + "Flu", + "아이유 (IU)", + 0, + 200, + false, + "music_flu", + R.drawable.img_album_exp2, + false, + 1 + ) + ) + + songDB.songDao().insert( + Song( + "Butter", + "방탄소년단 (BTS)", + 0, + 190, + false, + "music_butter", + R.drawable.img_album_exp, + false, + 2 + ) + ) + + songDB.songDao().insert( + Song( + "Next Level", + "에스파 (AESPA)", + 0, + 210, + false, + "music_next", + R.drawable.img_album_exp3, + false, + 3 + ) + ) + + + songDB.songDao().insert( + Song( + "Boy with Luv", + "music_boy", + 0, + 230, + false, + "music_boy", + R.drawable.img_album_exp4, + false, + 4 + ) + ) + + + songDB.songDao().insert( + Song( + "BBoom BBoom", + "모모랜드 (MOMOLAND)", + 0, + 240, + false, + "music_bboom", + R.drawable.img_album_exp5, + false, + 5 + ) + ) + + val songDBData = songDB.songDao().getSongs() + Log.d("DB data", songDBData.toString()) + } + + private fun getJwt() : String? { + val spf = this.getSharedPreferences("auth2", MODE_PRIVATE) + + return spf!!.getString("jwt", "") + } + } \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/SignUpActivity.kt b/app/src/main/java/umc/study/umc_7th/SignUpActivity.kt new file mode 100644 index 0000000..6f6e7c8 --- /dev/null +++ b/app/src/main/java/umc/study/umc_7th/SignUpActivity.kt @@ -0,0 +1,53 @@ +package umc.study.umc_7th + +import android.os.Bundle +import android.util.Log +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import umc.study.umc_7th.databinding.ActivitySignUpBinding + +class SignUpActivity : AppCompatActivity() { + + lateinit var binding: ActivitySignUpBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivitySignUpBinding.inflate(layoutInflater) + setContentView(binding.root) + + binding.signUpSignUpBtn.setOnClickListener { + val signUpCompletion = signUp() + if(signUpCompletion) { + finish() + } + } + } + + private fun getUser() : User { + val email : String = binding.signUpIdEt.text.toString() + "@" + binding.signUpDirectInputEt.text.toString() + val pwd : String = binding.signUpPasswordEt.text.toString() + + return User(email, pwd) + } + + private fun signUp() : Boolean { + if(binding.signUpIdEt.text.toString().isEmpty() || binding.signUpDirectInputEt.text.toString().isEmpty()) { + Toast.makeText(this, "이메일 형식이 잘못되었습니다.", Toast.LENGTH_SHORT).show() + return false + } + + if(binding.signUpPasswordEt.text.toString() != binding.signUpPasswordCheckEt.text.toString()) { + Toast.makeText(this, "비밀번호가 일치하지 않습니다.", Toast.LENGTH_SHORT).show() + return false + } + + val userDB = SongDatabase.getInstance(this)!! + userDB.userDao().insert(getUser()) + + val user = userDB.userDao().getUsers() + Log.d("sign-up", user.toString()) + + Toast.makeText(this, "회원가입이 완료되었습니다.", Toast.LENGTH_SHORT).show() + return true + } +} \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/SongDao.kt b/app/src/main/java/umc/study/umc_7th/SongDao.kt index f5de1e9..7492b67 100644 --- a/app/src/main/java/umc/study/umc_7th/SongDao.kt +++ b/app/src/main/java/umc/study/umc_7th/SongDao.kt @@ -5,7 +5,6 @@ import androidx.room.Delete import androidx.room.Insert import androidx.room.Query import androidx.room.Update - @Dao interface SongDao { @Insert @@ -22,10 +21,4 @@ interface SongDao { @Query("SELECT * FROM SongTable WHERE id = :id") fun getSong(id: Int): Song - - @Query("UPDATE SongTable SET isLike= :isLike WHERE id = :id") - fun updateIsLikeById(isLike: Boolean, id: Int) - - @Query("SELECT * FROM SongTable WHERE isLike= :isLike") - fun getLikedSongs(isLike: Boolean): List } \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/SongDatabase.kt b/app/src/main/java/umc/study/umc_7th/SongDatabase.kt index f52d9d8..6c3d683 100644 --- a/app/src/main/java/umc/study/umc_7th/SongDatabase.kt +++ b/app/src/main/java/umc/study/umc_7th/SongDatabase.kt @@ -2,14 +2,14 @@ package umc.study.umc_7th import android.content.Context import androidx.room.Database +import androidx.room.Room import androidx.room.RoomDatabase import com.google.firebase.firestore.auth.User -@Database(entities = [Song::class, Album::class, User::class, Like::class], version = 1) +@Database(entities = [Song::class], version = 1) abstract class SongDatabase: RoomDatabase() { - abstract fun albumDao(): AlbumDao abstract fun songDao(): SongDao - abstract fun userDao() : UserDao + abstract fun albumDao(): AlbumDao companion object { private var instance: SongDatabase? = null diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml new file mode 100644 index 0000000..7a3b16f --- /dev/null +++ b/app/src/main/res/layout/activity_login.xml @@ -0,0 +1,284 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_sign_up.xml b/app/src/main/res/layout/activity_sign_up.xml new file mode 100644 index 0000000..e5e99f2 --- /dev/null +++ b/app/src/main/res/layout/activity_sign_up.xml @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 7d3b3ec52fda8f892150783d479b50ada45e3d87 Mon Sep 17 00:00:00 2001 From: deephoon Date: Wed, 27 Nov 2024 22:22:38 +0900 Subject: [PATCH 5/7] =?UTF-8?q?API=20=EC=97=B0=EA=B2=B0=20=EB=B0=8F=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/umc/study/umc_7th/ApiRepository.kt | 7 +++ .../main/java/umc/study/umc_7th/AuthApi.kt | 13 +++++ .../java/umc/study/umc_7th/AuthService.kt | 53 ++++++++++++++++++ .../java/umc/study/umc_7th/BaseResponse.kt | 15 +++++ .../java/umc/study/umc_7th/LoginActivity.kt | 29 +++++----- .../java/umc/study/umc_7th/LookFragment.kt | 50 ++--------------- .../main/java/umc/study/umc_7th/LookView.kt | 7 +++ .../umc/study/umc_7th/RetrofitInstance.kt | 17 ++++++ .../java/umc/study/umc_7th/SignUpActivity.kt | 36 ++++++++---- .../main/java/umc/study/umc_7th/SignUpView.kt | 6 ++ .../main/java/umc/study/umc_7th/SongApi.kt | 9 +++ .../java/umc/study/umc_7th/SongRVadapter.kt | 56 +++++++++++++++++++ .../java/umc/study/umc_7th/SongResponse.kt | 24 ++++++++ .../java/umc/study/umc_7th/SongService.kt | 40 +++++++++++++ 14 files changed, 292 insertions(+), 70 deletions(-) create mode 100644 app/src/main/java/umc/study/umc_7th/ApiRepository.kt create mode 100644 app/src/main/java/umc/study/umc_7th/AuthApi.kt create mode 100644 app/src/main/java/umc/study/umc_7th/AuthService.kt create mode 100644 app/src/main/java/umc/study/umc_7th/BaseResponse.kt create mode 100644 app/src/main/java/umc/study/umc_7th/LookView.kt create mode 100644 app/src/main/java/umc/study/umc_7th/RetrofitInstance.kt create mode 100644 app/src/main/java/umc/study/umc_7th/SignUpView.kt create mode 100644 app/src/main/java/umc/study/umc_7th/SongApi.kt create mode 100644 app/src/main/java/umc/study/umc_7th/SongRVadapter.kt create mode 100644 app/src/main/java/umc/study/umc_7th/SongResponse.kt create mode 100644 app/src/main/java/umc/study/umc_7th/SongService.kt diff --git a/app/src/main/java/umc/study/umc_7th/ApiRepository.kt b/app/src/main/java/umc/study/umc_7th/ApiRepository.kt new file mode 100644 index 0000000..2bc16d0 --- /dev/null +++ b/app/src/main/java/umc/study/umc_7th/ApiRepository.kt @@ -0,0 +1,7 @@ +package umc.study.umc_7th + +class ApiRepository { + companion object { + const val BASE_URL = "http://3.35.121.185/" + } +} \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/AuthApi.kt b/app/src/main/java/umc/study/umc_7th/AuthApi.kt new file mode 100644 index 0000000..397df80 --- /dev/null +++ b/app/src/main/java/umc/study/umc_7th/AuthApi.kt @@ -0,0 +1,13 @@ +////package umc.study.umc_7th +// +//import retrofit2.Call +//import retrofit2.http.Body +//import retrofit2.http.POST +// +//interface AuthApi { +// @POST("/users") +// fun signUp(@Body user: User): Call +// +// @POST("/users/login") +// fun login(@Body user: User): Call +//} diff --git a/app/src/main/java/umc/study/umc_7th/AuthService.kt b/app/src/main/java/umc/study/umc_7th/AuthService.kt new file mode 100644 index 0000000..14e80f8 --- /dev/null +++ b/app/src/main/java/umc/study/umc_7th/AuthService.kt @@ -0,0 +1,53 @@ +package umc.study.umc_7th + +import android.util.Log +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response + +class AuthService { + private lateinit var signUpView: SignUpView + private lateinit var loginView: LoginView + + fun setSignUpView(signUpView: SignUpView) { + this.signUpView = signUpView + } + + fun setLoginView(loginView: LoginView) { + this.loginView = loginView + } + + fun signUp(user : User) { + RetrofitInstance.authApi.signUp(user).enqueue(object: Callback { + override fun onResponse(call: Call, response: Response) { + Log.d("SignUp-Success", response.toString()) + val response : BaseResponse = response.body()!! + when(response.code) { + 1000 -> signUpView.onSignUpSuccess() + else -> signUpView.onSignUpFailure(response.message) + } + } + override fun onFailure(call: Call, t: Throwable) { + Log.d("SignUp-Failure", t.message.toString()) + } + }) + Log.d("SignUpActivity", "All Finished") + } + + fun login(user : User) { + RetrofitInstance.authApi.login(user).enqueue(object: Callback { + override fun onResponse(call: Call, response: Response) { + Log.d("Login-Success", response.toString()) + val response : BaseResponse = response.body()!! + when(val code = response.code) { + 1000 -> loginView.onLoginSuccess(code, response.result!!) + else -> loginView.onLoginFailure(response.message) + } + } + override fun onFailure(call: Call, t: Throwable) { + Log.d("Login-Failure", t.message.toString()) + } + }) + Log.d("LoginActivity", "All Finished") + } +} \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/BaseResponse.kt b/app/src/main/java/umc/study/umc_7th/BaseResponse.kt new file mode 100644 index 0000000..b2df535 --- /dev/null +++ b/app/src/main/java/umc/study/umc_7th/BaseResponse.kt @@ -0,0 +1,15 @@ +package umc.study.umc_7th + +import com.google.gson.annotations.SerializedName + +data class BaseResponse( + @SerializedName("isSuccess") val isSuccess : Boolean, + @SerializedName("code") val code : Int, + @SerializedName("message") val message : String, + @SerializedName("result") val result : Result? +) + +data class Result ( + @SerializedName("userIdx") var userIdx : Int, + @SerializedName("jwt") var jwt : String +) diff --git a/app/src/main/java/umc/study/umc_7th/LoginActivity.kt b/app/src/main/java/umc/study/umc_7th/LoginActivity.kt index 0fb9273..47396c3 100644 --- a/app/src/main/java/umc/study/umc_7th/LoginActivity.kt +++ b/app/src/main/java/umc/study/umc_7th/LoginActivity.kt @@ -7,7 +7,7 @@ import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import umc.study.umc_7th.databinding.ActivityLoginBinding -class LoginActivity : AppCompatActivity() { +class LoginActivity : AppCompatActivity(), LoginView { lateinit var binding : ActivityLoginBinding @@ -41,26 +41,29 @@ class LoginActivity : AppCompatActivity() { val email : String = binding.loginIdEt.text.toString() + "@" + binding.loginDirectInputEt.text.toString() val pwd : String = binding.loginPasswordEt.text.toString() - val songDB = SongDatabase.getInstance(this)!! - val user = songDB.userDao().getUser(email, pwd) + val authService = AuthService() + authService.setLoginView(this) - if (user != null) { - Log.d("LoginActivity", user.id.toString()) - saveJwt(user.id) - startMainActivity() - } else { - Toast.makeText(this, "회원 정보가 존재하지 않습니다", Toast.LENGTH_SHORT).show() - } + authService.login(User(email, pwd, "")) } - private fun saveJwt(jwt : Int) { - val spf = getSharedPreferences("auth", MODE_PRIVATE) + private fun saveJwtFromServer(jwt : String) { + val spf = getSharedPreferences("auth2", MODE_PRIVATE) val editor = spf.edit() - editor.putInt("jwt", jwt) + editor.putString("jwt", jwt) editor.apply() } + override fun onLoginSuccess(code : Int, result : Result) { + saveJwtFromServer(result.jwt) + startMainActivity() + } + + override fun onLoginFailure(message : String) { + Toast.makeText(this, message, Toast.LENGTH_SHORT).show() + } + private fun startMainActivity() { val intent = Intent(this, MainActivity::class.java) startActivity(intent) diff --git a/app/src/main/java/umc/study/umc_7th/LookFragment.kt b/app/src/main/java/umc/study/umc_7th/LookFragment.kt index 3b24c44..2cf9f45 100644 --- a/app/src/main/java/umc/study/umc_7th/LookFragment.kt +++ b/app/src/main/java/umc/study/umc_7th/LookFragment.kt @@ -1,9 +1,13 @@ package umc.study.umc_7th import android.os.Bundle +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button +import android.widget.ScrollView +import android.widget.TextView import androidx.fragment.app.Fragment import umc.study.umc_7th.databinding.FragmentLookBinding @@ -44,31 +48,6 @@ class LookFragment : Fragment(), LookView { binding = FragmentLookBinding.inflate(inflater, container, false) songDB = SongDatabase.getInstance(requireContext())!! - // 스크롤 뷰 초기화 -// scrollView = binding.lookSv -// -// // 버튼 초기화 -// chartBtn = binding.lookChartBtn -// videoBtn = binding.lookVideoBtn -// genreBtn = binding.lookGenreBtn -// situationBtn = binding.lookSituationBtn -// audioBtn = binding.lookAudioBtn -// atmosphereBtn = binding.lookAtmostphereBtn -// -// buttonList = listOf(chartBtn, videoBtn, genreBtn, situationBtn, audioBtn, atmosphereBtn) -// -// // 텍스트 초기화 -// chartTv = binding.lookChartTv -// videoTv = binding.lookVideoTv -// genreTv = binding.lookGenreTv -// situationTv = binding.lookSituationTv -// audioTv = binding.lookAudioTv -// atmosphereTv = binding.lookAtmostphereTv -// -// textList = listOf(chartTv, videoTv, genreTv, situationTv, audioTv, atmosphereTv) -// -// setButtonClickListeners() - return binding.root } @@ -91,27 +70,6 @@ class LookFragment : Fragment(), LookView { } - private fun setButtonClickListeners() { - for (i in buttonList.indices) { - val button = buttonList[i] - - button.setOnClickListener { - initButton(i) - } - } - } - - private fun initButton(idx : Int) { - for(presentBtn : Button in buttonList) { - if(presentBtn == buttonList[idx]) { - presentBtn.setBackgroundResource(R.drawable.selected_button) - } else { - presentBtn.setBackgroundResource(R.drawable.not_selected_button) - } - } - scrollView.smoothScrollTo(0, textList[idx].top) - } - override fun onGetSongLoading() { binding.lookLoadingPb.visibility = View.VISIBLE } diff --git a/app/src/main/java/umc/study/umc_7th/LookView.kt b/app/src/main/java/umc/study/umc_7th/LookView.kt new file mode 100644 index 0000000..199633a --- /dev/null +++ b/app/src/main/java/umc/study/umc_7th/LookView.kt @@ -0,0 +1,7 @@ +package umc.study.umc_7th + +interface LookView { + fun onGetSongLoading() + fun onGetSongSuccess(code: Int, result: FloChartResult) + fun onGetSongFailure(code: Int, message: String) +} \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/RetrofitInstance.kt b/app/src/main/java/umc/study/umc_7th/RetrofitInstance.kt new file mode 100644 index 0000000..551568c --- /dev/null +++ b/app/src/main/java/umc/study/umc_7th/RetrofitInstance.kt @@ -0,0 +1,17 @@ +package umc.study.umc_7th + +import retrofit2.Retrofit +import retrofit2.converter.gson.GsonConverterFactory + +class RetrofitInstance { + companion object{ + private val retrofit by lazy { + Retrofit.Builder() + .baseUrl(ApiRepository.BASE_URL) + .addConverterFactory(GsonConverterFactory.create()) + .build() + } + val authApi = retrofit.create(AuthApi::class.java) + val songApi = retrofit.create(SongApi::class.java) + } +} \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/SignUpActivity.kt b/app/src/main/java/umc/study/umc_7th/SignUpActivity.kt index 6f6e7c8..731d02d 100644 --- a/app/src/main/java/umc/study/umc_7th/SignUpActivity.kt +++ b/app/src/main/java/umc/study/umc_7th/SignUpActivity.kt @@ -2,11 +2,15 @@ package umc.study.umc_7th import android.os.Bundle import android.util.Log +import android.view.View import android.widget.Toast import androidx.appcompat.app.AppCompatActivity +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response import umc.study.umc_7th.databinding.ActivitySignUpBinding -class SignUpActivity : AppCompatActivity() { +class SignUpActivity : AppCompatActivity(), SignUpView { lateinit var binding: ActivitySignUpBinding @@ -16,18 +20,16 @@ class SignUpActivity : AppCompatActivity() { setContentView(binding.root) binding.signUpSignUpBtn.setOnClickListener { - val signUpCompletion = signUp() - if(signUpCompletion) { - finish() - } + signUp() } } private fun getUser() : User { val email : String = binding.signUpIdEt.text.toString() + "@" + binding.signUpDirectInputEt.text.toString() val pwd : String = binding.signUpPasswordEt.text.toString() + var name : String = binding.signUpNameEt.text.toString() - return User(email, pwd) + return User(email, pwd, name) } private fun signUp() : Boolean { @@ -41,13 +43,25 @@ class SignUpActivity : AppCompatActivity() { return false } - val userDB = SongDatabase.getInstance(this)!! - userDB.userDao().insert(getUser()) + if(binding.signUpNameEt.text.toString().isEmpty()) { + Toast.makeText(this, "이름 형식이 잘못되었습니다.", Toast.LENGTH_SHORT).show() + return false + } - val user = userDB.userDao().getUsers() - Log.d("sign-up", user.toString()) + val authService = AuthService() + authService.setSignUpView(this) // 객체를 통한 멤버 함수 호출 - Toast.makeText(this, "회원가입이 완료되었습니다.", Toast.LENGTH_SHORT).show() + + authService.signUp(getUser()) return true } + + override fun onSignUpSuccess() { + finish() + } + + override fun onSignUpFailure(message : String) { + binding.signUpEmailErrorTv.visibility = View.VISIBLE + binding.signUpEmailErrorTv.text = message + } } \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/SignUpView.kt b/app/src/main/java/umc/study/umc_7th/SignUpView.kt new file mode 100644 index 0000000..2c345f2 --- /dev/null +++ b/app/src/main/java/umc/study/umc_7th/SignUpView.kt @@ -0,0 +1,6 @@ +package umc.study.umc_7th + +interface SignUpView { + fun onSignUpSuccess() + fun onSignUpFailure(message : String) +} \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/SongApi.kt b/app/src/main/java/umc/study/umc_7th/SongApi.kt new file mode 100644 index 0000000..d225ab8 --- /dev/null +++ b/app/src/main/java/umc/study/umc_7th/SongApi.kt @@ -0,0 +1,9 @@ +package umc.study.umc_7th + +import retrofit2.Call +import retrofit2.http.GET + +interface SongApi { + @GET("/song") + fun getSongs(): Call +} \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/SongRVadapter.kt b/app/src/main/java/umc/study/umc_7th/SongRVadapter.kt new file mode 100644 index 0000000..28621e7 --- /dev/null +++ b/app/src/main/java/umc/study/umc_7th/SongRVadapter.kt @@ -0,0 +1,56 @@ +package umc.study.umc_7th + +import android.content.Context +import android.util.Log +import android.view.LayoutInflater +import android.view.ViewGroup +import android.widget.ImageView +import android.widget.TextView +import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import umc.study.umc_7th.databinding.ItemSongBinding + +class SongRVAdapter(val context: Context, val result : FloChartResult) : RecyclerView.Adapter() { + + + override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): SongRVAdapter.ViewHolder { + val binding: ItemSongBinding = ItemSongBinding.inflate(LayoutInflater.from(viewGroup.context), viewGroup, false) + + return ViewHolder(binding) + } + + override fun onBindViewHolder(holder: SongRVAdapter.ViewHolder, position: Int) { + //holder.bind(result.songs[position]) + + if(result.songs[position].coverImgUrl == "" || result.songs[position].coverImgUrl == null){ + + } else { + Log.d("image",result.songs[position].coverImgUrl ) + Glide.with(context).load(result.songs[position].coverImgUrl).into(holder.coverImg) + } + holder.title.text = result.songs[position].title + holder.singer.text = result.songs[position].singer + + } + + override fun getItemCount(): Int = result.songs.size + + + inner class ViewHolder(val binding: ItemSongBinding) : RecyclerView.ViewHolder(binding.root){ + + val coverImg : ImageView = binding.itemSongImgIv + val title : TextView = binding.itemSongTitleTv + val singer : TextView = binding.itemSongSingerTv + + } + + interface MyItemClickListener{ + fun onRemoveSong(songId: Int) + } + + private lateinit var mItemClickListener: MyItemClickListener + + fun setMyItemClickListener(itemClickListener: MyItemClickListener){ + mItemClickListener = itemClickListener + } +} \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/SongResponse.kt b/app/src/main/java/umc/study/umc_7th/SongResponse.kt new file mode 100644 index 0000000..ed8a643 --- /dev/null +++ b/app/src/main/java/umc/study/umc_7th/SongResponse.kt @@ -0,0 +1,24 @@ +package umc.study.umc_7th + +import com.google.gson.annotations.SerializedName + +data class SongResponse( + @SerializedName("isSuccess") val isSuccess : Boolean, + @SerializedName("code") val code : Int, + @SerializedName("message") val message : String, + @SerializedName("result") val result : FloChartResult + +) + +data class FloChartResult( + @SerializedName("songs") val songs: List +) + +data class FloChartSongs( + @SerializedName("songIdx") val songIdx: Int, + @SerializedName("title") val title: String, + @SerializedName("singer") val singer: String, + @SerializedName("albumIdx") val albumIdx: Int, + @SerializedName("coverImgUrl") val coverImgUrl: String + +) \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/SongService.kt b/app/src/main/java/umc/study/umc_7th/SongService.kt new file mode 100644 index 0000000..4c302b5 --- /dev/null +++ b/app/src/main/java/umc/study/umc_7th/SongService.kt @@ -0,0 +1,40 @@ +package umc.study.umc_7th + +import android.util.Log +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response + +class SongService() { + private lateinit var lookView: LookView + + fun setLookView(lookView: LookView) { + this.lookView = lookView + } + + fun getSongs() { + lookView.onGetSongLoading() + + RetrofitInstance.songApi.getSongs().enqueue(object : Callback { + override fun onResponse(call: Call, response: Response) { + if (response.isSuccessful && response.code() == 200) { + val songResponse: SongResponse = response.body()!! + + Log.d("SONG-RESPONSE", songResponse.toString()) + + when (val code = songResponse.code) { + 1000 -> { + lookView.onGetSongSuccess(code, songResponse.result!!) + } + + else -> lookView.onGetSongFailure(code, songResponse.message) + } + } + } + + override fun onFailure(call: Call, t: Throwable) { + lookView.onGetSongFailure(400, "네트워크 오류가 발생했습니다.") + } + }) + } +} \ No newline at end of file From bb1d90c309333a87f8c09eb66df38df03d88a17d Mon Sep 17 00:00:00 2001 From: deephoon Date: Wed, 27 Nov 2024 22:24:50 +0900 Subject: [PATCH 6/7] RoomDB --- app/build.gradle.kts | 14 ++++ app/src/main/AndroidManifest.xml | 2 + app/src/main/java/umc/study/umc_7th/Album.kt | 26 +++---- .../main/java/umc/study/umc_7th/AlbumDao.kt | 74 +++++++++---------- app/src/main/java/umc/study/umc_7th/Like.kt | 24 +++--- .../main/java/umc/study/umc_7th/SongDao.kt | 48 ++++++------ .../main/java/umc/study/umc_7th/UserDao.kt | 38 +++++----- app/src/main/res/layout/item_song.xml | 71 ++++++++++++++++++ 8 files changed, 192 insertions(+), 105 deletions(-) create mode 100644 app/src/main/res/layout/item_song.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 35a55b1..9f8b8ed 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -142,4 +142,18 @@ dependencies { implementation("androidx.room:room-migration:2.6.0") implementation("androidx.room:room-runtime:2.6.0") kapt("androidx.room:room-compiler:2.6.0") + +// Retrofit + implementation("com.squareup.retrofit2:retrofit:2.9.0") + implementation("com.squareup.retrofit2:converter-gson:2.9.0") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2") + implementation("com.squareup.retrofit2:adapter-rxjava2:2.9.0") + +// okHttp + implementation("com.squareup.okhttp3:okhttp:4.9.0") + implementation("com.squareup.okhttp3:logging-interceptor:4.9.0") + +// Glide + implementation("com.github.bumptech.glide:glide:4.12.0") + annotationProcessor("com.github.bumptech.glide:compiler:4.12.0") } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0e62aba..31292ab 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -30,4 +30,6 @@ android:exported="true"/> + + \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/Album.kt b/app/src/main/java/umc/study/umc_7th/Album.kt index 1358f24..e092435 100644 --- a/app/src/main/java/umc/study/umc_7th/Album.kt +++ b/app/src/main/java/umc/study/umc_7th/Album.kt @@ -1,13 +1,13 @@ -package umc.study.umc_7th - -import androidx.room.Entity -import androidx.room.PrimaryKey - -@Entity(tableName = "AlbumTable") -data class Album( - // album의 pk는 임의로 지정해 줄 것이므로, autoGenerate 하지 않음 - @PrimaryKey(autoGenerate = false) var id: Int = 0, - var title: String? = "", - var singer: String? = "", - var coverImage: Int? = null -) \ No newline at end of file +//package umc.study.umc_7th +// +//import androidx.room.Entity +//import androidx.room.PrimaryKey +// +//@Entity(tableName = "AlbumTable") +// +//data class Album( +// @PrimaryKey(autoGenerate = false) var id: Int = 0, +// var title: String? = "", +// var singer: String? = "", +// var coverImage: Int? = null +//) \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/AlbumDao.kt b/app/src/main/java/umc/study/umc_7th/AlbumDao.kt index 8cbaafa..ef5157a 100644 --- a/app/src/main/java/umc/study/umc_7th/AlbumDao.kt +++ b/app/src/main/java/umc/study/umc_7th/AlbumDao.kt @@ -1,37 +1,37 @@ -package umc.study.umc_7th - -import androidx.room.Dao -import androidx.room.Delete -import androidx.room.Insert -import androidx.room.Query -import androidx.room.Update - -@Dao -interface AlbumDao { - @Insert - fun insert(album: Album) - - @Update - fun update(album: Album) - - @Delete - fun delete(album: Album) - - @Query("SELECT * FROM AlbumTable") // 테이블의 모든 값을 가져온다. - fun getAlbums(): List - - @Query("SELECT * FROM AlbumTable WHERE id = :id") - fun getAlbum(id: Int): Album - - @Insert - fun likeAlbum(like : Like) - - @Query("select id from LikeTable where userId =:userId and albumId = :albumId") - fun isLikedAlbum(userId : Int, albumId : Int) : Int? - - @Query("delete from LikeTable where userId =:userId and albumId = :albumId") - fun dislikedAlbum(userId : Int, albumId : Int) - - @Query("select at.* from LikeTable as lt left join AlbumTable as at on lt.albumId = at.id where lt.userId = :userId") - fun getLikedAlbums(userId : Int) : List -} \ No newline at end of file +//package umc.study.umc_7th +// +//import androidx.room.Dao +//import androidx.room.Delete +//import androidx.room.Insert +//import androidx.room.Query +//import androidx.room.Update +// +//@Dao +//interface AlbumDao { +// @Insert +// fun insert(album: Album) +// +// @Update +// fun update(album: Album) +// +// @Delete +// fun delete(album: Album) +// +// @Query("SELECT * FROM AlbumTable") // 테이블의 모든 값을 가져온다. +// fun getAlbums(): List +// +// @Query("SELECT * FROM AlbumTable WHERE id = :id") +// fun getAlbum(id: Int): Album +// +// @Insert +// fun likeAlbum(like : Like) +// +// @Query("select id from LikeTable where userId =:userId and albumId = :albumId") +// fun isLikedAlbum(userId : Int, albumId : Int) : Int? +// +// @Query("delete from LikeTable where userId =:userId and albumId = :albumId") +// fun dislikedAlbum(userId : Int, albumId : Int) +// +// @Query("select at.* from LikeTable as lt left join AlbumTable as at on lt.albumId = at.id where lt.userId = :userId") +// fun getLikedAlbums(userId : Int) : List +//} \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/Like.kt b/app/src/main/java/umc/study/umc_7th/Like.kt index ffaca4b..b05f3fa 100644 --- a/app/src/main/java/umc/study/umc_7th/Like.kt +++ b/app/src/main/java/umc/study/umc_7th/Like.kt @@ -1,12 +1,12 @@ -package umc.study.umc_7th - -import androidx.room.Entity -import androidx.room.PrimaryKey - -@Entity(tableName = "LikeTable") -data class Like( - var userId : Int, - var albumId : Int -) { - @PrimaryKey(autoGenerate = true) var id : Int = 0 -} \ No newline at end of file +//package umc.study.umc_7th +// +//import androidx.room.Entity +//import androidx.room.PrimaryKey +// +//@Entity(tableName = "LikeTable") +//data class Like( +// var userId : Int, +// var albumId : Int +//) { +// @PrimaryKey(autoGenerate = true) var id : Int = 0 +//} \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/SongDao.kt b/app/src/main/java/umc/study/umc_7th/SongDao.kt index 7492b67..46c3208 100644 --- a/app/src/main/java/umc/study/umc_7th/SongDao.kt +++ b/app/src/main/java/umc/study/umc_7th/SongDao.kt @@ -1,24 +1,24 @@ -package umc.study.umc_7th - -import androidx.room.Dao -import androidx.room.Delete -import androidx.room.Insert -import androidx.room.Query -import androidx.room.Update -@Dao -interface SongDao { - @Insert - fun insert(song: Song) - - @Update - fun update(song: Song) - - @Delete - fun delete(song: Song) - - @Query("SELECT * FROM SongTable") - fun getSongs(): List - - @Query("SELECT * FROM SongTable WHERE id = :id") - fun getSong(id: Int): Song -} \ No newline at end of file +//package umc.study.umc_7th +// +//import androidx.room.Dao +//import androidx.room.Delete +//import androidx.room.Insert +//import androidx.room.Query +//import androidx.room.Update +//@Dao +//interface SongDao { +// @Insert +// fun insert(song: Song) +// +// @Update +// fun update(song: Song) +// +// @Delete +// fun delete(song: Song) +// +// @Query("SELECT * FROM SongTable") +// fun getSongs(): List +// +// @Query("SELECT * FROM SongTable WHERE id = :id") +// fun getSong(id: Int): Song +//} \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/UserDao.kt b/app/src/main/java/umc/study/umc_7th/UserDao.kt index 5700bbc..060977a 100644 --- a/app/src/main/java/umc/study/umc_7th/UserDao.kt +++ b/app/src/main/java/umc/study/umc_7th/UserDao.kt @@ -1,19 +1,19 @@ -package umc.study.umc_7th - -import androidx.room.Dao -import androidx.room.Insert -import androidx.room.Query -import com.google.firebase.firestore.auth.User - - -@Dao -interface UserDao { - @Insert - fun insert(user : User) - - @Query("select * from UserTable") - fun getUsers() : List - - @Query("select * from UserTable where email =:email and password = :password") - fun getUser(email : String, password : String) : User? -} \ No newline at end of file +//package umc.study.umc_7th +// +//import androidx.room.Dao +//import androidx.room.Insert +//import androidx.room.Query +//import com.google.firebase.firestore.auth.User +// +// +//@Dao +//interface UserDao { +// @Insert +// fun insert(user : User) +// +// @Query("select * from UserTable") +// fun getUsers() : List +// +// @Query("select * from UserTable where email =:email and password = :password") +// fun getUser(email : String, password : String) : User? +//} \ No newline at end of file diff --git a/app/src/main/res/layout/item_song.xml b/app/src/main/res/layout/item_song.xml new file mode 100644 index 0000000..c9ce120 --- /dev/null +++ b/app/src/main/res/layout/item_song.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + From 032896b80dc6c88ed45b30bb2d1c3d64b3e75e9d Mon Sep 17 00:00:00 2001 From: deephoon Date: Wed, 4 Dec 2024 21:14:13 +0900 Subject: [PATCH 7/7] =?UTF-8?q?DB=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/umc/study/umc_7th/Album.kt | 26 +++---- .../main/java/umc/study/umc_7th/AlbumDao.kt | 74 +++++++++---------- .../java/umc/study/umc_7th/AlbumFragment.kt | 1 - app/src/main/java/umc/study/umc_7th/Like.kt | 24 +++--- .../main/java/umc/study/umc_7th/SongDao.kt | 48 ++++++------ .../java/umc/study/umc_7th/SongDatabase.kt | 1 + .../main/java/umc/study/umc_7th/UserDao.kt | 36 +++++---- 7 files changed, 104 insertions(+), 106 deletions(-) diff --git a/app/src/main/java/umc/study/umc_7th/Album.kt b/app/src/main/java/umc/study/umc_7th/Album.kt index e092435..d60cc90 100644 --- a/app/src/main/java/umc/study/umc_7th/Album.kt +++ b/app/src/main/java/umc/study/umc_7th/Album.kt @@ -1,13 +1,13 @@ -//package umc.study.umc_7th -// -//import androidx.room.Entity -//import androidx.room.PrimaryKey -// -//@Entity(tableName = "AlbumTable") -// -//data class Album( -// @PrimaryKey(autoGenerate = false) var id: Int = 0, -// var title: String? = "", -// var singer: String? = "", -// var coverImage: Int? = null -//) \ No newline at end of file +package umc.study.umc_7th + +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "AlbumTable") +data class Album( + // album의 pk는 임의로 지정해 줄 것이므로, autoGenerate 하지 않음 + @PrimaryKey(autoGenerate = false) var id: Int = 0, + var title: String? = "", + var singer: String? = "", + var coverImage: Int? = null +) diff --git a/app/src/main/java/umc/study/umc_7th/AlbumDao.kt b/app/src/main/java/umc/study/umc_7th/AlbumDao.kt index ef5157a..8cbaafa 100644 --- a/app/src/main/java/umc/study/umc_7th/AlbumDao.kt +++ b/app/src/main/java/umc/study/umc_7th/AlbumDao.kt @@ -1,37 +1,37 @@ -//package umc.study.umc_7th -// -//import androidx.room.Dao -//import androidx.room.Delete -//import androidx.room.Insert -//import androidx.room.Query -//import androidx.room.Update -// -//@Dao -//interface AlbumDao { -// @Insert -// fun insert(album: Album) -// -// @Update -// fun update(album: Album) -// -// @Delete -// fun delete(album: Album) -// -// @Query("SELECT * FROM AlbumTable") // 테이블의 모든 값을 가져온다. -// fun getAlbums(): List -// -// @Query("SELECT * FROM AlbumTable WHERE id = :id") -// fun getAlbum(id: Int): Album -// -// @Insert -// fun likeAlbum(like : Like) -// -// @Query("select id from LikeTable where userId =:userId and albumId = :albumId") -// fun isLikedAlbum(userId : Int, albumId : Int) : Int? -// -// @Query("delete from LikeTable where userId =:userId and albumId = :albumId") -// fun dislikedAlbum(userId : Int, albumId : Int) -// -// @Query("select at.* from LikeTable as lt left join AlbumTable as at on lt.albumId = at.id where lt.userId = :userId") -// fun getLikedAlbums(userId : Int) : List -//} \ No newline at end of file +package umc.study.umc_7th + +import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Insert +import androidx.room.Query +import androidx.room.Update + +@Dao +interface AlbumDao { + @Insert + fun insert(album: Album) + + @Update + fun update(album: Album) + + @Delete + fun delete(album: Album) + + @Query("SELECT * FROM AlbumTable") // 테이블의 모든 값을 가져온다. + fun getAlbums(): List + + @Query("SELECT * FROM AlbumTable WHERE id = :id") + fun getAlbum(id: Int): Album + + @Insert + fun likeAlbum(like : Like) + + @Query("select id from LikeTable where userId =:userId and albumId = :albumId") + fun isLikedAlbum(userId : Int, albumId : Int) : Int? + + @Query("delete from LikeTable where userId =:userId and albumId = :albumId") + fun dislikedAlbum(userId : Int, albumId : Int) + + @Query("select at.* from LikeTable as lt left join AlbumTable as at on lt.albumId = at.id where lt.userId = :userId") + fun getLikedAlbums(userId : Int) : List +} \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/AlbumFragment.kt b/app/src/main/java/umc/study/umc_7th/AlbumFragment.kt index 1910120..f4e93f0 100644 --- a/app/src/main/java/umc/study/umc_7th/AlbumFragment.kt +++ b/app/src/main/java/umc/study/umc_7th/AlbumFragment.kt @@ -11,7 +11,6 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.setFragmentResultListener import com.google.android.material.tabs.TabLayoutMediator import com.google.gson.Gson -import umc.study.umc_7th.Album import umc.study.umc_7th.AlbumRVAdapter import umc.study.umc_7th.HomeFragment import umc.study.umc_7th.Like diff --git a/app/src/main/java/umc/study/umc_7th/Like.kt b/app/src/main/java/umc/study/umc_7th/Like.kt index b05f3fa..ffaca4b 100644 --- a/app/src/main/java/umc/study/umc_7th/Like.kt +++ b/app/src/main/java/umc/study/umc_7th/Like.kt @@ -1,12 +1,12 @@ -//package umc.study.umc_7th -// -//import androidx.room.Entity -//import androidx.room.PrimaryKey -// -//@Entity(tableName = "LikeTable") -//data class Like( -// var userId : Int, -// var albumId : Int -//) { -// @PrimaryKey(autoGenerate = true) var id : Int = 0 -//} \ No newline at end of file +package umc.study.umc_7th + +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "LikeTable") +data class Like( + var userId : Int, + var albumId : Int +) { + @PrimaryKey(autoGenerate = true) var id : Int = 0 +} \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/SongDao.kt b/app/src/main/java/umc/study/umc_7th/SongDao.kt index 46c3208..7492b67 100644 --- a/app/src/main/java/umc/study/umc_7th/SongDao.kt +++ b/app/src/main/java/umc/study/umc_7th/SongDao.kt @@ -1,24 +1,24 @@ -//package umc.study.umc_7th -// -//import androidx.room.Dao -//import androidx.room.Delete -//import androidx.room.Insert -//import androidx.room.Query -//import androidx.room.Update -//@Dao -//interface SongDao { -// @Insert -// fun insert(song: Song) -// -// @Update -// fun update(song: Song) -// -// @Delete -// fun delete(song: Song) -// -// @Query("SELECT * FROM SongTable") -// fun getSongs(): List -// -// @Query("SELECT * FROM SongTable WHERE id = :id") -// fun getSong(id: Int): Song -//} \ No newline at end of file +package umc.study.umc_7th + +import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Insert +import androidx.room.Query +import androidx.room.Update +@Dao +interface SongDao { + @Insert + fun insert(song: Song) + + @Update + fun update(song: Song) + + @Delete + fun delete(song: Song) + + @Query("SELECT * FROM SongTable") + fun getSongs(): List + + @Query("SELECT * FROM SongTable WHERE id = :id") + fun getSong(id: Int): Song +} \ No newline at end of file diff --git a/app/src/main/java/umc/study/umc_7th/SongDatabase.kt b/app/src/main/java/umc/study/umc_7th/SongDatabase.kt index 6c3d683..87ebea4 100644 --- a/app/src/main/java/umc/study/umc_7th/SongDatabase.kt +++ b/app/src/main/java/umc/study/umc_7th/SongDatabase.kt @@ -10,6 +10,7 @@ import com.google.firebase.firestore.auth.User abstract class SongDatabase: RoomDatabase() { abstract fun songDao(): SongDao abstract fun albumDao(): AlbumDao + abstract fun UserDao(): UserDao companion object { private var instance: SongDatabase? = null diff --git a/app/src/main/java/umc/study/umc_7th/UserDao.kt b/app/src/main/java/umc/study/umc_7th/UserDao.kt index 060977a..2a9ef96 100644 --- a/app/src/main/java/umc/study/umc_7th/UserDao.kt +++ b/app/src/main/java/umc/study/umc_7th/UserDao.kt @@ -1,19 +1,17 @@ -//package umc.study.umc_7th -// -//import androidx.room.Dao -//import androidx.room.Insert -//import androidx.room.Query -//import com.google.firebase.firestore.auth.User -// -// -//@Dao -//interface UserDao { -// @Insert -// fun insert(user : User) -// -// @Query("select * from UserTable") -// fun getUsers() : List -// -// @Query("select * from UserTable where email =:email and password = :password") -// fun getUser(email : String, password : String) : User? -//} \ No newline at end of file +package umc.study.umc_7th + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.Query + +@Dao +interface UserDao { + @Insert + fun insert(user : User) + + @Query("select * from UserTable") + fun getUsers() : List + + @Query("select * from UserTable where email =:email and password = :password") + fun getUser(email : String, password : String) : User? +} \ No newline at end of file