From b7fa9e7f335a9a02937ff73abb4999214f78c54b Mon Sep 17 00:00:00 2001
From: MiN <81948815+leesumin0526@users.noreply.github.com>
Date: Tue, 21 May 2024 20:00:42 +0900
Subject: [PATCH] =?UTF-8?q?[Maro/#28]=20feat=20::=206=EC=A3=BC=EC=B0=A8=20?=
=?UTF-8?q?=EA=B5=AC=ED=98=84=20(#29)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* [maro/#28] feat :: RecyclerView item
* [maro/#28] feat && fix :: 앨범 상세 정보 개발 && 앱 꺼짐 에러 수정
* [maro/#28] feat :: 보관함 개발
* [maro/#28] feat && fix :: 보관함 switch on/off 에러 해결 && 삭제 기능 추가
* [maro/#28] feat :: 선택 앨범 정보로 변경 실패
* [maro/#28] feat :: 파일 추가
* [maro/#28] fix :: onPlayAlbum 에러 수정
* [maro/#28] fix :: 6주차 구현 완료
---
.idea/workspace.xml | 109 ++++++--
UMC_6th/app/src/main/AndroidManifest.xml | 13 +-
.../main/java/com/example/umc_6th/Album.kt | 8 +
.../java/com/example/umc_6th/AlbumFragment.kt | 22 +-
.../com/example/umc_6th/AlbumRVAdapter.kt | 48 ++++
.../example/umc_6th/CommunicationInterface.kt | 5 +
.../java/com/example/umc_6th/HomeFragment.kt | 56 +++-
.../example/umc_6th/LockerAlbumRVAdapter.kt | 76 ++++++
.../com/example/umc_6th/LockerFragment.kt | 10 +-
.../com/example/umc_6th/LockerVPAdapter.kt | 5 +-
.../java/com/example/umc_6th/MainActivity.kt | 7 +
.../com/example/umc_6th/MusicFileFragment.kt | 19 ++
.../com/example/umc_6th/SavedSongFragment.kt | 67 ++++-
.../app/src/main/res/drawable/app_icon.jpg | Bin 0 -> 2845 bytes
.../src/main/res/layout/fragment_album.xml | 254 +++++++++---------
.../app/src/main/res/layout/fragment_home.xml | 137 +---------
.../src/main/res/layout/fragment_locker.xml | 72 ++++-
.../main/res/layout/fragment_music_file.xml | 14 +
.../main/res/layout/fragment_saved_song.xml | 22 +-
.../app/src/main/res/layout/item_album.xml | 13 +-
.../src/main/res/layout/item_locker_album.xml | 93 +++++++
21 files changed, 713 insertions(+), 337 deletions(-)
create mode 100644 UMC_6th/app/src/main/java/com/example/umc_6th/Album.kt
create mode 100644 UMC_6th/app/src/main/java/com/example/umc_6th/AlbumRVAdapter.kt
create mode 100644 UMC_6th/app/src/main/java/com/example/umc_6th/CommunicationInterface.kt
create mode 100644 UMC_6th/app/src/main/java/com/example/umc_6th/LockerAlbumRVAdapter.kt
create mode 100644 UMC_6th/app/src/main/java/com/example/umc_6th/MusicFileFragment.kt
create mode 100644 UMC_6th/app/src/main/res/drawable/app_icon.jpg
create mode 100644 UMC_6th/app/src/main/res/layout/fragment_music_file.xml
create mode 100644 UMC_6th/app/src/main/res/layout/item_locker_album.xml
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 77f373b..168645f 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -10,11 +10,6 @@
@style/Theme.UMC_6th
-
-
- @style/Theme.UMC_6th
-
-
@style/Theme.UMC_6th
@@ -25,11 +20,6 @@
@style/Theme.UMC_6th
-
-
- @style/Theme.UMC_6th
-
-
@style/Theme.UMC_6th
@@ -60,6 +50,11 @@
@style/Theme.UMC_6th
+
+
+ @style/Theme.UMC_6th
+
+
@style/Theme.UMC_6th
@@ -95,6 +90,11 @@
@style/Theme.UMC_6th
+
+
+ @style/Theme.UMC_6th
+
+
@style/Theme.UMC_6th
@@ -106,14 +106,9 @@
-
+
-
-
-
-
-
-
+
@@ -150,11 +145,13 @@
@@ -174,7 +171,7 @@
@@ -227,8 +224,8 @@
"SHARE_PROJECT_CONFIGURATION_FILES": "true",
"cf.first.check.clang-format": "false",
"cidr.known.project.marker": "true",
- "git-widget-placeholder": "maro/#23",
- "last_opened_file_path": "C:/android/MARO_HW1/UMC_6th/app/src/main/res/drawable",
+ "git-widget-placeholder": "maro/#28",
+ "last_opened_file_path": "C:/android/MARO_HW1/UMC_6th/app/src/main/java/com/example/umc_6th",
"project.structure.last.edited": "Modules",
"project.structure.proportion": "0.17",
"project.structure.side.proportion": "0.2",
@@ -243,6 +240,7 @@
}
+
@@ -741,7 +739,63 @@
1715506370734
-
+
+
+ 1715784614776
+
+
+
+ 1715784614776
+
+
+
+ 1716170497553
+
+
+
+ 1716170497553
+
+
+
+ 1716172521692
+
+
+
+ 1716172521692
+
+
+
+ 1716178932335
+
+
+
+ 1716178932335
+
+
+
+ 1716183771907
+
+
+
+ 1716183771907
+
+
+
+ 1716187165248
+
+
+
+ 1716187165248
+
+
+
+ 1716286338161
+
+
+
+ 1716286338161
+
+
@@ -782,6 +836,13 @@
-
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/UMC_6th/app/src/main/AndroidManifest.xml b/UMC_6th/app/src/main/AndroidManifest.xml
index b91e63a..13e6aad 100644
--- a/UMC_6th/app/src/main/AndroidManifest.xml
+++ b/UMC_6th/app/src/main/AndroidManifest.xml
@@ -2,6 +2,10 @@
+
+
+
+
+
+
+
-
+ android:exported="true" />
\ No newline at end of file
diff --git a/UMC_6th/app/src/main/java/com/example/umc_6th/Album.kt b/UMC_6th/app/src/main/java/com/example/umc_6th/Album.kt
new file mode 100644
index 0000000..eccd99b
--- /dev/null
+++ b/UMC_6th/app/src/main/java/com/example/umc_6th/Album.kt
@@ -0,0 +1,8 @@
+package com.example.umc_6th
+
+data class Album(
+ var title : String? = "",
+ var singer : String? = "",
+ var coverImage : Int? = null,
+ var songs: ArrayList? = null // 앨범 수록곡
+)
diff --git a/UMC_6th/app/src/main/java/com/example/umc_6th/AlbumFragment.kt b/UMC_6th/app/src/main/java/com/example/umc_6th/AlbumFragment.kt
index adc379b..4860606 100644
--- a/UMC_6th/app/src/main/java/com/example/umc_6th/AlbumFragment.kt
+++ b/UMC_6th/app/src/main/java/com/example/umc_6th/AlbumFragment.kt
@@ -11,9 +11,11 @@ import com.example.umc_6th.databinding.FragmentAlbumBinding
import com.example.umc_6th.databinding.FragmentAlbumBinding.inflate
import com.example.umc_6th.databinding.FragmentSongBinding
import com.google.android.material.tabs.TabLayoutMediator
+import com.google.gson.Gson
class AlbumFragment : Fragment() {
lateinit var binding: FragmentAlbumBinding
+ private var gson : Gson = Gson()
private val information = arrayListOf("수록곡","상세정보","영상")
override fun onCreateView(
@@ -21,7 +23,12 @@ class AlbumFragment : Fragment() {
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- binding = inflate(inflater,container,false)
+ binding = FragmentAlbumBinding.inflate(inflater,container,false)
+
+ val albumToJson = arguments?.getString("album")
+ val album = gson.fromJson(albumToJson, Album::class.java)
+ setInit(album)
+
binding.albumBackIv.setOnClickListener{
(context as MainActivity).supportFragmentManager.beginTransaction().
replace(R.id.main_frm,HomeFragment()).
@@ -33,10 +40,10 @@ class AlbumFragment : Fragment() {
setFragmentResultListener("TitleInfo") { requestKey, bundle ->
- binding.albumTitleTv.text = bundle.getString("title")
+ binding.albumMusicTitleTv.text = bundle.getString("title")
}
setFragmentResultListener("SingerInfo") { requestKey, bundle ->
- binding.albumSingerTv.text = bundle.getString("singer")
+ binding.albumSingerNameTv.text = bundle.getString("singer")
}
TabLayoutMediator(binding.albumContentTb,binding.albumContentVp){
@@ -46,4 +53,11 @@ class AlbumFragment : Fragment() {
return binding.root
}
-}
\ No newline at end of file
+
+ private fun setInit(album : Album) {
+ binding.albumAlbumIv.setImageResource(album.coverImage!!)
+ binding.albumMusicTitleTv.text = album.title.toString()
+ binding.albumSingerNameTv.text = album.singer.toString()
+ }
+
+}
diff --git a/UMC_6th/app/src/main/java/com/example/umc_6th/AlbumRVAdapter.kt b/UMC_6th/app/src/main/java/com/example/umc_6th/AlbumRVAdapter.kt
new file mode 100644
index 0000000..60eb001
--- /dev/null
+++ b/UMC_6th/app/src/main/java/com/example/umc_6th/AlbumRVAdapter.kt
@@ -0,0 +1,48 @@
+package com.example.umc_6th
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.recyclerview.widget.RecyclerView
+import com.example.umc_6th.databinding.ItemAlbumBinding
+
+class AlbumRVAdapter(private val albumList: ArrayList) : RecyclerView.Adapter(){
+ inner class ViewHolder(val binding: ItemAlbumBinding): RecyclerView.ViewHolder(binding.root){
+ fun bind(album: Album){
+ binding.itemAlbumTitleTv.text = album.title
+ binding.itemAlbumSingerTv.text = album.singer
+ binding.itemAlbumCoverImgIv.setImageResource(album.coverImage!!)
+ }
+ }
+
+ override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): AlbumRVAdapter.ViewHolder {
+ val binding: ItemAlbumBinding = ItemAlbumBinding.inflate(LayoutInflater.from(viewGroup.context), viewGroup, false)
+ return ViewHolder(binding)
+ }
+
+
+ override fun onBindViewHolder(holder: AlbumRVAdapter.ViewHolder, position: Int) {
+ holder.bind(albumList[position])
+ holder.itemView.setOnClickListener {
+ itemClickListener.onItemClick(albumList[position])
+ }
+
+ holder.binding.itemAlbumPlayImgIv.setOnClickListener{
+ itemClickListener.onPlayAlbum(albumList[position])
+ }
+ }
+
+ override fun getItemCount(): Int = albumList.size
+
+ interface OnItemClickListener {
+ fun onItemClick(album : Album)
+ fun onPlayAlbum(album: Album)
+ }
+
+ private lateinit var itemClickListener : OnItemClickListener
+
+ fun setItemClickListener(onItemClickListener: OnItemClickListener) {
+ this.itemClickListener = onItemClickListener
+ }
+
+
+}
\ No newline at end of file
diff --git a/UMC_6th/app/src/main/java/com/example/umc_6th/CommunicationInterface.kt b/UMC_6th/app/src/main/java/com/example/umc_6th/CommunicationInterface.kt
new file mode 100644
index 0000000..e4e9c3f
--- /dev/null
+++ b/UMC_6th/app/src/main/java/com/example/umc_6th/CommunicationInterface.kt
@@ -0,0 +1,5 @@
+package com.example.umc_6th
+
+interface CommunicationInterface {
+ fun sendData(album : Album)
+}
\ No newline at end of file
diff --git a/UMC_6th/app/src/main/java/com/example/umc_6th/HomeFragment.kt b/UMC_6th/app/src/main/java/com/example/umc_6th/HomeFragment.kt
index b28ac36..6110f3c 100644
--- a/UMC_6th/app/src/main/java/com/example/umc_6th/HomeFragment.kt
+++ b/UMC_6th/app/src/main/java/com/example/umc_6th/HomeFragment.kt
@@ -17,8 +17,10 @@ import android.os.Looper
import android.widget.Button
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.google.gson.Gson
-class HomeFragment : Fragment() {
+class HomeFragment : Fragment(), CommunicationInterface {
lateinit var binding : FragmentHomeBinding
@@ -28,22 +30,36 @@ class HomeFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
+ private var albumDatas = ArrayList()
+
+ override fun sendData(album: Album) {
+ if(activity is MainActivity) {
+ val activity = activity as MainActivity
+ activity.updateMainPlayerCl(album)
+ }
+ }
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
+
): View? {
binding = FragmentHomeBinding.inflate(inflater, container, false)
- binding.homeAlbumImgIv1.setOnClickListener {
- setFragmentResult("TitleInfo", bundleOf("title" to binding.titleLilac.text.toString()))
- setFragmentResult("SingerInfo", bundleOf("singer" to binding.singerIu.text.toString()))
-
- (context as MainActivity)
- .supportFragmentManager.beginTransaction()
- .replace(R.id.main_frm, AlbumFragment()).commitAllowingStateLoss()
+ albumDatas.apply {
+ add(Album("Butter", "방탄소년단 (BTS)", R.drawable.img_album_exp))
+ add(Album("Lilac", "아이유 (IU)", R.drawable.img_album_exp2))
+ add(Album("Next Level", "에스파 (AESPA)", R.drawable.img_album_exp3))
+ add(Album("Boy with Luv", "방탄소년단 (BTS)", R.drawable.img_album_exp4))
+ add(Album("BBoom BBoom", "모모랜드 (MOMOLAND)", R.drawable.img_album_exp5))
+ add(Album("Weekend", "태연 (Tae Yeon)", R.drawable.img_album_exp6))
}
+ val albumRVAdapter = AlbumRVAdapter(albumDatas)
+ binding.homeTodayMusicAlbumRv.adapter = albumRVAdapter
+ binding.homeTodayMusicAlbumRv.layoutManager = LinearLayoutManager(requireActivity(), LinearLayoutManager.HORIZONTAL, false)
+
+
val bannerAdapter = BannerVPAdapter(this)
bannerAdapter.addFragment(BannerFragment(R.drawable.img_home_viewpager_exp))
bannerAdapter.addFragment(BannerFragment(R.drawable.img_home_viewpager_exp2))
@@ -64,9 +80,31 @@ class HomeFragment : Fragment() {
binding.homePannelIndicator.setViewPager(binding.homePannelBackgroundVp)
+ albumRVAdapter.setItemClickListener(object : AlbumRVAdapter.OnItemClickListener {
+ override fun onItemClick(album : Album) {
+ changeAlbumFragment(album)
+ }
+
+ override fun onPlayAlbum(album: Album) {
+ sendData(album)
+ }
+ })
+
return binding.root
}
+ private fun changeAlbumFragment(album: Album) {
+ (context as MainActivity).supportFragmentManager.beginTransaction()
+ .replace(R.id.main_frm, AlbumFragment().apply {
+ arguments = Bundle().apply {
+ val gson = Gson()
+ val albumToJson = gson.toJson(album)
+ putString("album", albumToJson)
+ }
+ })
+ .commitAllowingStateLoss()
+ }
+
private fun autoSlide(adapter: BannerVPAdapter) {
timer.scheduleAtFixedRate(object : TimerTask() {
override fun run() {
@@ -81,4 +119,4 @@ class HomeFragment : Fragment() {
}
}, 3000, 3000)
}
-}
\ No newline at end of file
+}
diff --git a/UMC_6th/app/src/main/java/com/example/umc_6th/LockerAlbumRVAdapter.kt b/UMC_6th/app/src/main/java/com/example/umc_6th/LockerAlbumRVAdapter.kt
new file mode 100644
index 0000000..967b064
--- /dev/null
+++ b/UMC_6th/app/src/main/java/com/example/umc_6th/LockerAlbumRVAdapter.kt
@@ -0,0 +1,76 @@
+package com.example.umc_6th
+
+import android.util.SparseBooleanArray
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import androidx.recyclerview.widget.RecyclerView
+import com.example.umc_6th.databinding.ItemLockerAlbumBinding
+
+class LockerAlbumRVAdapter (private val albumList: ArrayList) : RecyclerView.Adapter() {
+ private val switchStatus = SparseBooleanArray()
+
+ override fun onCreateViewHolder(
+ parent: ViewGroup,
+ viewType: Int):
+ LockerAlbumRVAdapter.ViewHolder {
+ val binding : ItemLockerAlbumBinding = ItemLockerAlbumBinding.inflate(LayoutInflater.from(parent.context), parent, false)
+
+ return ViewHolder(binding)
+ }
+
+ override fun onBindViewHolder(holder: LockerAlbumRVAdapter.ViewHolder, position: Int) {
+ holder.bind(albumList[position])
+ holder.itemView.setOnClickListener {
+ itemClickListener.onItemClick(albumList[position])
+ }
+
+ holder.binding.itemLockerAlbumMoreIv.setOnClickListener {
+ itemClickListener.onRemoveAlbum(position)
+ }
+
+ val switch = holder.binding.switchRV
+ switch.isChecked = switchStatus[position]
+ switch.setOnClickListener {
+ if (switch.isChecked) {
+ switchStatus.put(position, true)
+ }
+ else {
+ switchStatus.put(position, false)
+ }
+
+ notifyItemChanged(position)
+ }
+ }
+
+ override fun getItemCount(): Int = albumList.size
+
+ inner class ViewHolder(val binding: ItemLockerAlbumBinding) : RecyclerView.ViewHolder(binding.root){
+ fun bind(album : Album){
+ binding.itemLockerAlbumTitleTv.text = album.title
+ binding.itemLockerAlbumSingerTv.text = album.singer
+ binding.itemLockerAlbumCoverImgIv.setImageResource(album.coverImage!!)
+ }
+ }
+
+ interface OnItemClickListener{
+ fun onItemClick(album: Album)
+ fun onRemoveAlbum(position: Int)
+ }
+
+ private lateinit var itemClickListener : OnItemClickListener
+
+ fun setItemClickListener(onItemClickListener: OnItemClickListener) {
+ this.itemClickListener = onItemClickListener
+ }
+
+ fun addItem(album : Album){
+ albumList.add(album)
+ notifyDataSetChanged()
+ }
+
+ fun removeItem(position : Int){
+ albumList.removeAt(position)
+ notifyDataSetChanged()
+ }
+
+}
\ No newline at end of file
diff --git a/UMC_6th/app/src/main/java/com/example/umc_6th/LockerFragment.kt b/UMC_6th/app/src/main/java/com/example/umc_6th/LockerFragment.kt
index 4a721f1..bb760c7 100644
--- a/UMC_6th/app/src/main/java/com/example/umc_6th/LockerFragment.kt
+++ b/UMC_6th/app/src/main/java/com/example/umc_6th/LockerFragment.kt
@@ -10,21 +10,21 @@ import com.google.android.material.tabs.TabLayoutMediator
class LockerFragment : Fragment() {
lateinit var binding: FragmentLockerBinding
- private val information = arrayListOf("저장한 곡", "음악파일", "저장앨범")
+ private val information = arrayListOf("저장한 곡", "음악파일")
+
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
- ): View? {
+ ): View {
binding = FragmentLockerBinding.inflate(inflater, container, false)
val lockerAdapter = LockerVPAdapter(this)
binding.lockerContentVp.adapter = lockerAdapter
-
- TabLayoutMediator(binding.lockerContentTb, binding.lockerContentVp){
- tab, position ->
+ TabLayoutMediator(binding.lockerContentTb, binding.lockerContentVp) { tab, position ->
tab.text = information[position]
}.attach()
+
return binding.root
}
}
\ No newline at end of file
diff --git a/UMC_6th/app/src/main/java/com/example/umc_6th/LockerVPAdapter.kt b/UMC_6th/app/src/main/java/com/example/umc_6th/LockerVPAdapter.kt
index 758188f..d77c9da 100644
--- a/UMC_6th/app/src/main/java/com/example/umc_6th/LockerVPAdapter.kt
+++ b/UMC_6th/app/src/main/java/com/example/umc_6th/LockerVPAdapter.kt
@@ -5,13 +5,12 @@ import androidx.viewpager2.adapter.FragmentStateAdapter
import com.example.myfirstapp.SavedAlbumFragment
class LockerVPAdapter (fragment: Fragment) : FragmentStateAdapter(fragment){
- override fun getItemCount(): Int = 3
+ override fun getItemCount(): Int = 2
override fun createFragment(position: Int): Fragment {
return when(position){
0 -> SavedSongFragment()
- 1 -> SavedAlbumFragment()
- else -> SavedAlbumFragment()
+ else -> MusicFileFragment()
}
}
diff --git a/UMC_6th/app/src/main/java/com/example/umc_6th/MainActivity.kt b/UMC_6th/app/src/main/java/com/example/umc_6th/MainActivity.kt
index 17a5c8a..f3cdc99 100644
--- a/UMC_6th/app/src/main/java/com/example/umc_6th/MainActivity.kt
+++ b/UMC_6th/app/src/main/java/com/example/umc_6th/MainActivity.kt
@@ -107,4 +107,11 @@ class MainActivity : AppCompatActivity() {
false
}
}
+
+ fun updateMainPlayerCl(album: Album) {
+ binding.mainMiniplayerTitleTv.text = album.title
+ binding.mainMiniplayerSingerTv.text = album.singer
+ binding.mainMiniplayerProgressSb.progress = 0
+ }
+
}
diff --git a/UMC_6th/app/src/main/java/com/example/umc_6th/MusicFileFragment.kt b/UMC_6th/app/src/main/java/com/example/umc_6th/MusicFileFragment.kt
new file mode 100644
index 0000000..b4958e4
--- /dev/null
+++ b/UMC_6th/app/src/main/java/com/example/umc_6th/MusicFileFragment.kt
@@ -0,0 +1,19 @@
+package com.example.umc_6th
+
+import android.os.Bundle
+import androidx.fragment.app.Fragment
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import com.example.umc_6th.databinding.FragmentMusicFileBinding
+
+class MusicFileFragment: Fragment() {
+
+ lateinit var binding: FragmentMusicFileBinding
+
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
+ binding = FragmentMusicFileBinding.inflate(inflater, container, false)
+
+ return binding.root
+ }
+}
\ No newline at end of file
diff --git a/UMC_6th/app/src/main/java/com/example/umc_6th/SavedSongFragment.kt b/UMC_6th/app/src/main/java/com/example/umc_6th/SavedSongFragment.kt
index d1dfb90..f018bd8 100644
--- a/UMC_6th/app/src/main/java/com/example/umc_6th/SavedSongFragment.kt
+++ b/UMC_6th/app/src/main/java/com/example/umc_6th/SavedSongFragment.kt
@@ -1,22 +1,75 @@
package com.example.umc_6th
import android.os.Bundle
-import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import com.example.umc_6th.databinding.FragmentSongBinding
+import androidx.fragment.app.Fragment
+import androidx.recyclerview.widget.LinearLayoutManager
+import com.example.umc_6th.databinding.FragmentSavedSongBinding
+import com.google.gson.Gson
-class SavedSongFragment : Fragment(){
+class SavedSongFragment : Fragment() {
- lateinit var binding: FragmentSongBinding
+ private var albumDatas = ArrayList()
+ lateinit var binding : FragmentSavedSongBinding
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ }
override fun onCreateView(
- inflater: LayoutInflater,
- container: ViewGroup?,
+ inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
- binding = FragmentSongBinding.inflate(inflater,container,false)
+ binding = FragmentSavedSongBinding.inflate(inflater, container, false)
+
+ albumDatas.apply {
+ add(Album("Butter", "방탄소년단 (BTS)", R.drawable.img_album_exp))
+ add(Album("Lilac", "아이유 (IU)", R.drawable.img_album_exp2))
+ add(Album("Next Level", "에스파 (AESPA)", R.drawable.img_album_exp3))
+ add(Album("Boy with Luv", "방탄소년단 (BTS)", R.drawable.img_album_exp4))
+ add(Album("BBoom BBoom", "모모랜드 (MOMOLAND)", R.drawable.img_album_exp5))
+ add(Album("Weekend", "태연 (Tae Yeon)", R.drawable.img_album_exp6))
+ add(Album("Butter", "방탄소년단 (BTS)", R.drawable.img_album_exp))
+ add(Album("Lilac", "아이유 (IU)", R.drawable.img_album_exp2))
+ add(Album("Next Level", "에스파 (AESPA)", R.drawable.img_album_exp3))
+ add(Album("Boy with Luv", "방탄소년단 (BTS)", R.drawable.img_album_exp4))
+ add(Album("BBoom BBoom", "모모랜드 (MOMOLAND)", R.drawable.img_album_exp5))
+ add(Album("Weekend", "태연 (Tae Yeon)", R.drawable.img_album_exp6))
+ add(Album("Butter", "방탄소년단 (BTS)", R.drawable.img_album_exp))
+ add(Album("Lilac", "아이유 (IU)", R.drawable.img_album_exp2))
+ add(Album("Next Level", "에스파 (AESPA)", R.drawable.img_album_exp3))
+ add(Album("Boy with Luv", "방탄소년단 (BTS)", R.drawable.img_album_exp4))
+ add(Album("BBoom BBoom", "모모랜드 (MOMOLAND)", R.drawable.img_album_exp5))
+ add(Album("Weekend", "태연 (Tae Yeon)", R.drawable.img_album_exp6))
+ }
+
+ val lockerAlbumRVAdapter = LockerAlbumRVAdapter(albumDatas)
+ binding.lockerMusicAlbumRv.adapter = lockerAlbumRVAdapter
+ binding.lockerMusicAlbumRv.layoutManager = LinearLayoutManager(requireActivity())
+
+ lockerAlbumRVAdapter.setItemClickListener(object : LockerAlbumRVAdapter.OnItemClickListener {
+ override fun onItemClick(album: Album) {
+ changedAlbumFragment(album)
+ }
+
+ override fun onRemoveAlbum(position : Int){
+ lockerAlbumRVAdapter.removeItem(position)
+ }
+ })
return binding.root
}
+
+ private fun changedAlbumFragment(album : Album) {
+ (context as MainActivity).supportFragmentManager.beginTransaction()
+ .replace(R.id.main_frm, AlbumFragment().apply {
+ arguments = Bundle().apply {
+ val gson = Gson()
+ val albumToJson = gson.toJson(album)
+ putString("album", albumToJson)
+ }
+ })
+ .commitAllowingStateLoss()
+ }
}
\ No newline at end of file
diff --git a/UMC_6th/app/src/main/res/drawable/app_icon.jpg b/UMC_6th/app/src/main/res/drawable/app_icon.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..196073a25b996e8ffdddeac72397342f228a4ce2
GIT binary patch
literal 2845
zcmai#2UJr@7sux%APNSE2t=wF5&R%=Lr_4PYXMdfMWi=LRCci-pfstnx)wC63jsw5
z=t`7;5D*Xo#tKRm5d}h(DxZLfNgz_PFBEmpp0hj2yqURo=J)RW&z*VV7I8OF+-~!e
z4S*m3AovHw9PlexvPcH?kD`D=$)l9fDk{ooC1s4hu^~oHS6xY2hoGao7Kh)6SJft(
z5)DoCaT^UFSy@?lwz7hvGEP%d6Gy-q7{Gr6gLODb4}Rbb@CNuF<_0(%;RlHkw&L(}
zt@sf@F9zM98wsHS0u3S2koXzUkc5eZ-~tv3B)v!mA+;C@dp9XU0D*uY#1a`P
zcCpqT73uhWZYt7o-#6epG{Ow)fyZ1&gb>sIzFl2TaB)z!bTCb>VBfh0%02F8pJaiyAXg=uhaZ&I-U{_%#hx
zy|?7HI=I(S&_&a=!#wlz$q%7-(7
zzH$y$hR261E#3ZKspb@1I&qu2J1txzYRY}6DQQc=Nu8Yu>ruCM1^lHG=OzMFUi=$rlkw0|ZqmT7YYvtxz&s1B>
z4m2bvl+bV7rTn3}V%qd5H-^6@^oGgl)RB6t+KtyPdRvUx)2l8eT3sIxXNRt4?Cc?#
z6KTvhZ)%0H_G{ipc(GOKC`|awjBi_G1${ENahw|DU+IaDk^l6-!fG#<-@8H#ngY*p
zQu;?yM|X+nFDJ3jK3fZY*^!qDawf@ztV33(ji2?s&mUF0xm%JoExM;X_N>IMl#c&d
z&dyCGo_+kcdb9K@*D8Fhn+cAaz9VNO#W8p!4xS63Pr|{gyqR2fcXCVYAzO@Ko2RZw
zsLNk-rA6iUd>nu)w2$`!&c01vUNUL2HYZ|ghrnS9J5lYAJa@4;
zd+Mhq`tv`U*r?R;qQOhyGt?C}j$>!;HyPJEtuQ)C`rjr+OrES++wo(i+PD%_^tAf1
zCq~t)Lh6sDCI(ULCpf0&&g~Vpo3Hay$$KjumMCOwvA2T{{A&Q>aVy~@17Njc?Zo;X
zt2+VY?=HF5j-ROAInH7a@I-huOgqZ-;jhjvj`lO|O}^W>p|k*A#MLm7
zdGXP-2Z?kZK@1$M>?U=h6LD#Td0|9K}aiTF7?V~72ZfI_Al8l3TaImOpd(gQ^eZq
zNx!xAfVOT3aa|u%qKzBkM_|#m89t$Q(s3(+)P9vD>Pn_=Cb;tY)T7NimR{HnU{5>=
zfMwL*=kEo?Y)aNvnm$&HN$-jmRjUNil&hJF=qDg&JYxiM=y8
zhDQuPut}+}@`!DS=ODl9ev$nY?FEm(58Dt%oGguXy?w}`C%dzrwm~Vt?MSCwXqJ-u
zF*ECr?|7HTDmnK*80z{mv=Sqg!!3Hc8-6*kUPIoMLpLOM8Pe_iumUpg(rKTibUAtl
zqnOoJG(_NsbY_Qe++FZ%ph2P@P=o@%;HQOko9
z*N{dB*Xh0bOn2}q4Zij>UH>ZOdg1U*Y*8KV%~pL+__)s9$q99*THqUYc8JX2hhfrP
zjRNq-ht6K(K63~;G5VW%j!%8pioUXjlZ-9NJ^-xLUj<=%M#hZ#r#)kN{h`_%$4W~_
zb6ruV-gAXp#%~|be>i~DpOSMApjVM*gBD$WjNTNp98c;*gKlwX4a3a2Tes@UR7{5C
zB8k$h81P~<0%yGLJ)I0Nt;*Kh&o;Nc%s+T@4k0xQ0`dus4Q2zAC|`}z4pMtbWwg$b
z+=AhH=Wuyqb2;gxlloa&Enh?ygRCmQ49m_uMv^|OC@08#SMp8zE^JKpv`;&i67r_>
zG&3afEUln?Kz-dof%<*^o5MA(dYI{>n(Z^f^%Kv^Ic*9k-y>#C1NHcteeVUHUR4wA
znyC$WE+0c}S^DQA1jB+_F(~fag%N|CFD=ou@f`_1fi-N`FxT<5Gx28|A}#8REwmMg
z*)7dK_Z%R8@hq`HYab+-jGYz=BH5SvqBE7k9%l>Ro$0t$mzZC3_?PA+dxuPW&+iK46y4~>FP8i5SojbwqPwbp_F
z>qp0os~+ThTRkUbT*i>4#^?0F{AO;=jklULQT|sr-lMtl?&0z#&3QKnU(#t5a^5Sg
zG1um5wehfP@2m~T-u`HYgAa2O}?~K
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+ android:layout_height="match_parent">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
\ No newline at end of file
+
+
\ No newline at end of file
diff --git a/UMC_6th/app/src/main/res/layout/fragment_home.xml b/UMC_6th/app/src/main/res/layout/fragment_home.xml
index bfa9df2..f8411e1 100644
--- a/UMC_6th/app/src/main/res/layout/fragment_home.xml
+++ b/UMC_6th/app/src/main/res/layout/fragment_home.xml
@@ -223,136 +223,15 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/home_pannel_background_vp"/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ app:layout_constraintTop_toBottomOf="@id/home_today_music_total_tv"/>
+ app:layout_constraintTop_toBottomOf="@id/home_today_music_album_rv"/>
@@ -10,9 +9,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="보관함"
- android:textSize="23sp"
+ android:textSize="25dp"
+ android:textStyle="bold"
android:textColor="@color/black"
- android:layout_marginTop="50dp"
+ android:layout_marginTop="55dp"
android:layout_marginStart="20dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
@@ -31,28 +31,76 @@
+
+
+
+
+
+
+
+
+
+
-
-
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toBottomOf="@id/locker_select_all_img_iv" />
\ No newline at end of file
diff --git a/UMC_6th/app/src/main/res/layout/fragment_music_file.xml b/UMC_6th/app/src/main/res/layout/fragment_music_file.xml
new file mode 100644
index 0000000..85737d5
--- /dev/null
+++ b/UMC_6th/app/src/main/res/layout/fragment_music_file.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/UMC_6th/app/src/main/res/layout/fragment_saved_song.xml b/UMC_6th/app/src/main/res/layout/fragment_saved_song.xml
index 938ba16..a1759c5 100644
--- a/UMC_6th/app/src/main/res/layout/fragment_saved_song.xml
+++ b/UMC_6th/app/src/main/res/layout/fragment_saved_song.xml
@@ -1,16 +1,20 @@
-
+
+
+ tools:listitem="@layout/item_locker_album" />
\ No newline at end of file
diff --git a/UMC_6th/app/src/main/res/layout/item_album.xml b/UMC_6th/app/src/main/res/layout/item_album.xml
index 6e858a9..23ae9f7 100644
--- a/UMC_6th/app/src/main/res/layout/item_album.xml
+++ b/UMC_6th/app/src/main/res/layout/item_album.xml
@@ -2,7 +2,7 @@
@@ -14,13 +14,12 @@
app:cardElevation="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent">
-
@@ -42,9 +41,7 @@
android:layout_marginTop="10dp"
android:text="LILAC"
android:textColor="@color/black"
- android:textSize="15sp"
- android:maxLines="1"
- android:ellipsize="end"
+ android:textSize="20sp"
app:layout_constraintStart_toStartOf="@id/item_album_cover_img_cardView"
app:layout_constraintTop_toBottomOf="@id/item_album_cover_img_cardView" />
@@ -55,8 +52,8 @@
android:layout_marginTop="3dp"
android:text="아이유 (IU)"
android:textColor="#a8a8a8"
- android:textSize="12sp"
+ android:textSize="15sp"
app:layout_constraintStart_toStartOf="@id/item_album_cover_img_cardView"
app:layout_constraintTop_toBottomOf="@id/item_album_title_tv" />
-
+
\ No newline at end of file
diff --git a/UMC_6th/app/src/main/res/layout/item_locker_album.xml b/UMC_6th/app/src/main/res/layout/item_locker_album.xml
new file mode 100644
index 0000000..78e2655
--- /dev/null
+++ b/UMC_6th/app/src/main/res/layout/item_locker_album.xml
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file