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
3 changes: 2 additions & 1 deletion nick/Imreallystupid/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ android {
}

dependencies {

implementation("me.relex:circleindicator:2.1.6")
implementation("com.google.code.gson:gson:2.8.7")
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)
implementation(libs.material)
Expand Down
21 changes: 17 additions & 4 deletions nick/Imreallystupid/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
xmlns:tools="http://schemas.android.com/tools" >

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />

<application
android:allowBackup="true"
Expand All @@ -10,10 +15,18 @@
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Imreallystupid">
android:theme="@style/Theme.Imreallystupid" >
<service
android:name=".MusicService"
android:enabled="true"
android:exported="true"
android:foregroundServiceType="mediaPlayback" >
</service>

<activity
android:name=".MainActivity"
android:exported="true">
android:exported="true"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

Expand All @@ -22,7 +35,7 @@
</activity>
<activity
android:name=".SongActivity"
android:exported="true">
android:exported="true" >
</activity>
</application>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.example.imreallystupid

data class Album(
var title: String = "",
var singer: String = "",
var coverImg: Int? = null,
var songs: ArrayList<Song>? = null){

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@ import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.example.imreallystupid.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 = Gson()
private val information = arrayListOf("수록곡","상세정보","영상")

override fun onCreateView(
Expand All @@ -23,8 +25,12 @@ class AlbumFragment : Fragment() {
): View {
binding = FragmentAlbumBinding.inflate(inflater, container, false)

binding.albumTitleTv.text = arguments?.getString("title")
binding.albumSingerTv.text = arguments?.getString("singer")
//binding.albumTitleTv.text = arguments?.getString("title")
//binding.albumSingerTv.text = arguments?.getString("singer")

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


binding.albumBackIv.setOnClickListener {
Expand All @@ -34,11 +40,18 @@ class AlbumFragment : Fragment() {

val albumAdapter = AlbumVPAdapter(this)
binding.albumContentVp.adapter = albumAdapter

TabLayoutMediator(binding.albumContentTb, binding.albumContentVp){
tab, position ->
tab.text = information[position]
}.attach()

return binding.root
}

private fun setinit(album: Album){
binding.albumAlbumIv.setImageResource(album.coverImg!!)
binding.albumTitleTv.text = album.title.toString()
binding.albumSingerTv.text = album.singer.toString()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package com.example.imreallystupid

import android.content.Context
import android.content.Intent
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.example.imreallystupid.databinding.ItemAlbumBinding

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


interface AlbumListItemClickListener{
fun onItemClick(album: Album)
}
private lateinit var mItemClickListener: AlbumListItemClickListener
fun setMyItemClickListener(itemClickListener: AlbumListItemClickListener){
mItemClickListener = itemClickListener
}



interface AlbumPlayListener{
fun changeText(album: Album)
}
private lateinit var sendMiniPlayer : AlbumPlayListener

fun sendToMiniPlayer(sendTodayAlbum : AlbumPlayListener) {
sendMiniPlayer = sendTodayAlbum
}



override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): AlbumRVAdapter.ViewHolder {
val binding: ItemAlbumBinding = ItemAlbumBinding.inflate(LayoutInflater.from(parent.context), parent,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.homeTodayAlbumArrowIv.setOnClickListener { sendMiniPlayer.changeText(albumlist[position]) }
// holder.binding.homeTodayAlbumTitleTv.setOnClickListener { mItemClickListner.onRemoveAlbum(position) }
}

override fun getItemCount(): Int = albumlist.size


inner class ViewHolder(val binding: ItemAlbumBinding): RecyclerView.ViewHolder(binding.root){

fun bind(album: Album){
binding.homeTodayAlbumTitleTv.text = album.title
binding.homeTodayAlbumSingerTv.text = album.singer
binding.homeTodayAlbumIv.setImageResource(album.coverImg!!)
}
}

}
Original file line number Diff line number Diff line change
@@ -1,19 +1,28 @@
package com.example.imreallystupid

import android.content.Intent
import android.os.Bundle
import android.os.Handler
import android.os.Looper
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.imreallystupid.databinding.FragmentHomeBinding

import com.google.gson.Gson
import kotlinx.coroutines.Runnable


class HomeFragment : Fragment() {

lateinit var binding: FragmentHomeBinding
private var albumData = ArrayList<Album>()
private var currentPage = 0
private var pageCount = 3
private lateinit var viewpager : ViewPager2



override fun onCreateView(
inflater: LayoutInflater,
Expand All @@ -22,8 +31,8 @@ class HomeFragment : Fragment() {
): View {
binding = FragmentHomeBinding.inflate(inflater, container, false)


binding.homeTodayAlbumIv.setOnClickListener {
//3주차 코드
/*binding.homeTodayAlbumTitleTv.setOnClickListener {
val song = Song(binding.homeTodayAlbumTitleTv.text.toString(),binding.homeTodayAlbumSingerTv.text.toString())
val sendData = Bundle().also {
it.putString("title",song.title)
Expand All @@ -35,14 +44,73 @@ class HomeFragment : Fragment() {

(context as MainActivity).supportFragmentManager.beginTransaction().replace(R.id.main_fragmentContainer,
albumFragment).commitAllowingStateLoss()
}*/

albumData.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 HomeAdaptor = HomeViewAdaptor(this)
binding.homeViewpagerVp.adapter = HomeAdaptor
val albumRVAdapter = AlbumRVAdapter(albumData)
binding.homeTodayAlbumRv.adapter = albumRVAdapter
binding.homeTodayAlbumRv.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)

albumRVAdapter.setMyItemClickListener(object : AlbumRVAdapter.AlbumListItemClickListener{
override fun onItemClick(album: Album) {
(context as MainActivity).supportFragmentManager.beginTransaction()
.replace(R.id.main_fragmentContainer, AlbumFragment().apply {
arguments = Bundle().apply {
val gson = Gson()
val albumJson = gson.toJson(album)
putString("album", albumJson)
}
})
.commitAllowingStateLoss()
}
})

albumRVAdapter.sendToMiniPlayer(object : AlbumRVAdapter.AlbumPlayListener {
override fun changeText(album: Album) {
(activity as MainActivity).updateMiniPlayer(album)
}
})

val HomeAdapter = HomeViewAdapter(this)
binding.homeViewpagerVp.adapter = HomeAdapter
binding.homeViewpagerVp.orientation = ViewPager2.ORIENTATION_HORIZONTAL
viewpager = binding.homeViewpagerVp

val indicator = binding.homeViewpagerIndicator
indicator.setViewPager(viewpager)

return binding.root
}

private val handler = Handler(Looper.getMainLooper())

private val runnable : Runnable = object : Runnable {
override fun run() {
if(currentPage == pageCount) {
currentPage = 0
}
viewpager.setCurrentItem(currentPage++, true)
handler.postDelayed(this, 3000)
}

}
override fun onResume() {
super.onResume()
handler.postDelayed(runnable, 3000)
}

override fun onPause() {
super.onPause()
handler.removeCallbacks(runnable)
}
}


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.example.imreallystupid

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

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

override fun createFragment(position: Int): Fragment {
return when (position) {
0 -> HomeViewFragment1()
1 -> HomeViewFragment2()
else -> HomeViewFragment3()
}
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,11 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.imreallystupid.databinding.FragmentLockerBinding
import com.google.android.material.tabs.TabLayoutMediator
import com.google.gson.Gson


class LockerFragment : Fragment() {
Expand All @@ -29,6 +32,7 @@ class LockerFragment : Fragment() {
tab.text = information[position]
}.attach()


return binding.root
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.example.imreallystupid

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.example.imreallystupid.databinding.ItemLockerBinding

class LockerRVAdapter( private val albumlist : ArrayList<Album> ) : RecyclerView.Adapter<LockerRVAdapter.ViewHolder>() {

private lateinit var mItemClickListener: LockerRVAdapter.AlbumListItemClickListener

interface AlbumListItemClickListener{
fun onRemoveAlbum(position: Int)
}

fun setMyItemClickListener(itemClickListener: LockerRVAdapter.AlbumListItemClickListener){
mItemClickListener = itemClickListener
}

fun removeitem(position: Int){
albumlist.removeAt(position)
notifyDataSetChanged()
}

override fun onCreateViewHolder(
parent: ViewGroup,
viewType: Int
): LockerRVAdapter.ViewHolder {
val binding = ItemLockerBinding.inflate(LayoutInflater.from(parent.context),parent,false)

return ViewHolder(binding)
}

override fun onBindViewHolder(holder: LockerRVAdapter.ViewHolder, position: Int) {
holder.bind(albumlist[position])
holder.binding.lockerSavedMoreIv.setOnClickListener { mItemClickListener.onRemoveAlbum(position) }
}

override fun getItemCount(): Int = albumlist.size

inner class ViewHolder(val binding: ItemLockerBinding) : RecyclerView.ViewHolder(binding.root) {

fun bind(album: Album) {
binding.lockerSavedTitleTv.text = album.title
binding.lockerSavedSingerTv.text = album.singer
binding.lockerSavedCoverImgIv.setImageResource(album.coverImg!!)
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ import androidx.viewpager2.adapter.FragmentStateAdapter
class LockerVPAdapter(fragment: Fragment) : FragmentStateAdapter(fragment) {
override fun createFragment(position: Int): Fragment {
return when(position) {
0 -> LockerViewFragment1()
0 -> SavedFragment()
1 -> LockerViewFragment2()
else -> LockerViewFragment3()
else -> SavedAlbumFragment()
}
}

Expand Down
Loading