Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion isoo/template/.idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 7 additions & 1 deletion isoo/template/app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
plugins {
id 'com.android.application'
id 'kotlin-android'
id 'kotlin-kapt'
}

android {
Expand Down Expand Up @@ -36,12 +37,17 @@ android {
}

dependencies {

implementation 'com.google.code.gson:gson:2.8.7'
implementation 'androidx.core:core-ktx:1.7.0'
implementation 'androidx.appcompat:appcompat:1.4.0'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
testImplementation 'junit:junit:4.'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

//RoomDB
implementation 'androidx.room:room-ktx:2.4.1'
implementation 'androidx.room:room-runtime:2.4.1'
kapt 'androidx.room:room-compiler:2.4.1'
}
3 changes: 2 additions & 1 deletion isoo/template/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
android:theme="@style/Theme.FLO">
<activity
android:name=".MainActivity"
android:exported="true">
android:exported="true"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

Expand Down
10 changes: 10 additions & 0 deletions isoo/template/app/src/main/java/com/example/flo/Album.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.example.flo

import java.util.ArrayList

data class Album(
var title: String? = "",
var singer: String? = "",
var coverImg: Int? = null,
var songs: ArrayList<Song>? = null
)
32 changes: 26 additions & 6 deletions isoo/template/app/src/main/java/com/example/flo/AlbumFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,45 @@ import android.widget.Toast
import androidx.fragment.app.Fragment
import com.example.flo.databinding.ActivitySongBinding
import com.example.flo.databinding.FragmentAlbumBinding
import com.google.android.material.tabs.TabLayoutMediator
import com.google.gson.Gson

class AlbumFragment : Fragment() {

lateinit var binding : FragmentAlbumBinding
private var gson = Gson()

private val info = arrayListOf("수록곡", "상세정보", "영상")

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentAlbumBinding.inflate(inflater,container,false)

val albumJson = arguments?.getString("album")
val album = gson.fromJson(albumJson, Album::class.java)
setInit(album)

binding.albumBackIv.setOnClickListener {
(context as MainActivity).supportFragmentManager.beginTransaction().replace(R.id.main_frm, HomeFragment()).commitAllowingStateLoss()
}
binding.albumSongGroup1L.setOnClickListener {
Toast.makeText(this.context,binding.albumSongTitle1Tv.text.toString(),Toast.LENGTH_SHORT).show()
}
binding.albumSongGroup2L.setOnClickListener {
Toast.makeText(this.context,binding.albumSongTitle2Tv.text.toString(),Toast.LENGTH_SHORT).show()
}

val albumAdapter = AlbumVPAdapter(this)
binding.albumContentVp.adapter = albumAdapter
TabLayoutMediator(binding.albumContentTb, binding.albumContentVp) {
tab, position ->
tab.text = info[position]
}.attach()

return binding.root
}

private fun setInit(album: Album) {
binding.albumAlbumIv.setImageResource(album.coverImg!!)
binding.albumMusicTitleTv.text = album.title.toString()
binding.albumSingerNameTv.text = album.singer.toString()
}

}
52 changes: 52 additions & 0 deletions isoo/template/app/src/main/java/com/example/flo/AlbumRVAdapter.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.example.flo

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.example.flo.databinding.ItemAlbumBinding
import java.util.*

class AlbumRVAdapter(private val albumList: ArrayList<Album>) : RecyclerView.Adapter<AlbumRVAdapter.ViewHolder>(){

interface MyItemClickListener{
fun onItemClick(album: Album)
fun onRemoveAlbum(position: Int)
}

private lateinit var mItemClickListener: MyItemClickListener

fun setMyItemClickListener(itemClickListener: MyItemClickListener){
mItemClickListener = itemClickListener
}

fun addItem(album: Album){
albumList.add(album)
notifyDataSetChanged()
}

fun removeItem(position: Int){
albumList.removeAt(position)
notifyDataSetChanged()
}

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 { mItemClickListener.onItemClick(albumList[position]) }
// holder.binding.itemAlbumTitleTv.setOnClickListener { mItemClickListener.onRemoveAlbum(position) }
}

override fun getItemCount(): Int = albumList.size

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.coverImg!!)
}
}
}
16 changes: 16 additions & 0 deletions isoo/template/app/src/main/java/com/example/flo/AlbumVPAdapter.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.example.flo

import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter

class AlbumVPAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
override fun getItemCount(): Int = 3

override fun createFragment(position: Int): Fragment {
return when(position) {
0 -> SongFragment()
1 -> DetailFragment()
else -> VideoFragment()
}
}
}
23 changes: 23 additions & 0 deletions isoo/template/app/src/main/java/com/example/flo/BannerFragment.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package com.example.flo

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.example.flo.databinding.FragmentBannerBinding

class BannerFragment(val imgRes : Int) : Fragment() {
lateinit var binding: FragmentBannerBinding

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentBannerBinding.inflate(inflater,container,false)

binding.bannerImageIv.setImageResource(imgRes)
return binding.root
}
}
19 changes: 19 additions & 0 deletions isoo/template/app/src/main/java/com/example/flo/BannerVPAdapter.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.example.flo

import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter

class BannerVPAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {

private val fragmentList : ArrayList<Fragment> = ArrayList()

override fun getItemCount(): Int = fragmentList.size

override fun createFragment(position: Int): Fragment = fragmentList[position]

fun addFragment(fragment: Fragment) {
fragmentList.add(fragment)
notifyItemInserted(fragmentList.size-1)
}

}
24 changes: 24 additions & 0 deletions isoo/template/app/src/main/java/com/example/flo/DetailFragment.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.example.flo

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.example.flo.databinding.FragmentDetailBinding

class DetailFragment : Fragment() {

lateinit var binding : FragmentDetailBinding

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentDetailBinding.inflate(inflater,container,false)

return binding.root
}

}
49 changes: 47 additions & 2 deletions isoo/template/app/src/main/java/com/example/flo/HomeFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,16 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.viewpager2.widget.ViewPager2
import com.example.flo.databinding.FragmentHomeBinding
import com.google.gson.Gson
import java.util.ArrayList

class HomeFragment : Fragment() {

lateinit var binding: FragmentHomeBinding
private var albumDatas = ArrayList<Album>()

override fun onCreateView(
inflater: LayoutInflater,
Expand All @@ -18,9 +23,49 @@ class HomeFragment : Fragment() {
): View? {
binding = FragmentHomeBinding.inflate(inflater, container, false)

binding.homeAlbumImgIv1.setOnClickListener {
(context as MainActivity).supportFragmentManager.beginTransaction().replace(R.id.main_frm, AlbumFragment()).commitAllowingStateLoss()
// binding.homeAlbumImgIv1.setOnClickListener {
// (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(context, LinearLayoutManager.HORIZONTAL, false)

albumRVAdapter.setMyItemClickListener(object: AlbumRVAdapter.MyItemClickListener {
override fun onItemClick(album: Album) {
changeAlbumFragment(album)
}

override fun onRemoveAlbum(position: Int) {
albumRVAdapter.removeItem(position)
}
})

val bannerAdapter = BannerVPAdapter(this)
bannerAdapter.addFragment(BannerFragment(R.drawable.img_home_viewpager_exp))
bannerAdapter.addFragment(BannerFragment(R.drawable.img_home_viewpager_exp2))
binding.homeBannerVp.adapter = bannerAdapter
binding.homeBannerVp.orientation = ViewPager2.ORIENTATION_HORIZONTAL

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 albumJson = gson.toJson(album)
putString("album", albumJson)
}
}).commitAllowingStateLoss()
}
}
10 changes: 10 additions & 0 deletions isoo/template/app/src/main/java/com/example/flo/LockerFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,28 @@ import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.example.flo.databinding.FragmentLockerBinding
import com.google.android.material.tabs.TabLayoutMediator

class LockerFragment : Fragment() {

lateinit var binding: FragmentLockerBinding

private val info = arrayListOf("저장한 곡", "음악파일")

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = FragmentLockerBinding.inflate(inflater, container, false)

val lockerAdapter = LockerVPAdapter(this)
binding.lockerContentVp.adapter = lockerAdapter
TabLayoutMediator(binding.lockerContentTb, binding.lockerContentVp) {
tab, position ->
tab.text = info[position]
}.attach()

return binding.root
}
}
15 changes: 15 additions & 0 deletions isoo/template/app/src/main/java/com/example/flo/LockerVPAdapter.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.example.flo

import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter

class LockerVPAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
override fun getItemCount(): Int = 2

override fun createFragment(position: Int): Fragment {
return when(position) {
0 -> SavedSongFragment()
else -> Fragment()
}
}
}
Loading