From 2c4c6c563ef564a2d638e33c557adabf3c0ef992 Mon Sep 17 00:00:00 2001 From: JoonIk Seo Date: Wed, 29 May 2024 17:52:57 +0900 Subject: [PATCH] [feat] week6 --- .../.idea/deploymentTargetDropDown.xml" | 15 +- .../.idea/vcs.xml" | 2 +- .../app/build.gradle" | 1 + .../app/src/main/AndroidManifest.xml" | 6 +- .../src/main/java/com/example/flo/Album.kt" | 10 + .../java/com/example/flo/HomeFragment.kt" | 13 +- .../java/com/example/flo/MainActivity.kt" | 29 +- .../src/main/java/com/example/flo/Song.kt" | 3 +- .../java/com/example/flo/SongActivity.kt" | 39 ++- .../src/main/res/layout/fragment_home.xml" | 286 +++++++++--------- .../app/src/main/res/values/themes.xml" | 6 + 11 files changed, 253 insertions(+), 157 deletions(-) create mode 100644 "\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/Album.kt" diff --git "a/\353\213\211-\354\204\234\354\244\200\354\235\265/.idea/deploymentTargetDropDown.xml" "b/\353\213\211-\354\204\234\354\244\200\354\235\265/.idea/deploymentTargetDropDown.xml" index 0c0c338..2538150 100644 --- "a/\353\213\211-\354\204\234\354\244\200\354\235\265/.idea/deploymentTargetDropDown.xml" +++ "b/\353\213\211-\354\204\234\354\244\200\354\235\265/.idea/deploymentTargetDropDown.xml" @@ -3,7 +3,20 @@ - + + + + + + + + + + + + + + diff --git "a/\353\213\211-\354\204\234\354\244\200\354\235\265/.idea/vcs.xml" "b/\353\213\211-\354\204\234\354\244\200\354\235\265/.idea/vcs.xml" index 35eb1dd..94a25f7 100644 --- "a/\353\213\211-\354\204\234\354\244\200\354\235\265/.idea/vcs.xml" +++ "b/\353\213\211-\354\204\234\354\244\200\354\235\265/.idea/vcs.xml" @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git "a/\353\213\211-\354\204\234\354\244\200\354\235\265/app/build.gradle" "b/\353\213\211-\354\204\234\354\244\200\354\235\265/app/build.gradle" index d0db292..6e72414 100644 --- "a/\353\213\211-\354\204\234\354\244\200\354\235\265/app/build.gradle" +++ "b/\353\213\211-\354\204\234\354\244\200\354\235\265/app/build.gradle" @@ -41,6 +41,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'com.google.android.material:material:1.4.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.2' + implementation 'com.google.code.gson:gson:2.10.1' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' diff --git "a/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/AndroidManifest.xml" "b/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/AndroidManifest.xml" index 29f87a4..c80a112 100644 --- "a/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/AndroidManifest.xml" +++ "b/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/AndroidManifest.xml" @@ -1,5 +1,6 @@ + android:exported="true" + android:theme="@style/SplashTheme"> @@ -23,6 +26,7 @@ android:exported="true"> + \ No newline at end of file diff --git "a/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/Album.kt" "b/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/Album.kt" new file mode 100644 index 0000000..1ec8552 --- /dev/null +++ "b/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/Album.kt" @@ -0,0 +1,10 @@ +package com.example.flo + +import java.util.* + + +data class Album( + var title: String? = "", + var singer: String? = "", + var coverImg: Int? = null +) diff --git "a/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/HomeFragment.kt" "b/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/HomeFragment.kt" index f8613f3..96fa19a 100644 --- "a/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/HomeFragment.kt" +++ "b/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/HomeFragment.kt" @@ -11,6 +11,7 @@ import com.example.flo.databinding.FragmentHomeBinding class HomeFragment : Fragment() { lateinit var binding: FragmentHomeBinding + private var albumDates = ArrayList() override fun onCreateView( inflater: LayoutInflater, @@ -19,10 +20,18 @@ 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() + albumDates.apply { + add(Album("Butter", "방탄소년단 (BTS)", R.drawable.img_album_exp)) + add(Album("Butter", "방탄소년단 (BTS)", R.drawable.img_album_exp)) + add(Album("Butter", "방탄소년단 (BTS)", R.drawable.img_album_exp)) + add(Album("Butter", "방탄소년단 (BTS)", R.drawable.img_album_exp)) + add(Album("Butter", "방탄소년단 (BTS)", R.drawable.img_album_exp)) } +// binding.homeAlbumImgIv1.setOnClickListener{ +// (context as MainActivity).supportFragmentManager.beginTransaction().replace(R.id.main_frm,AlbumFragment()).commitAllowingStateLoss() +// } + val bannerAdapter = BannerVPAdapter(this) bannerAdapter.addFragment(BannerFragment(R.drawable.img_home_viewpager_exp)) diff --git "a/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/MainActivity.kt" "b/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/MainActivity.kt" index 0df9847..126a6af 100644 --- "a/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/MainActivity.kt" +++ "b/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/MainActivity.kt" @@ -3,20 +3,26 @@ package com.example.flo import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle +import android.view.Display.Mode import com.example.flo.databinding.ActivityMainBinding +import com.google.gson.Gson class MainActivity : AppCompatActivity() { lateinit var binding: ActivityMainBinding + private var song: Song = Song() + private var gson: Gson = Gson() + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + setTheme(R.style.Theme_FLO) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) initBottomNavigation() - val song = Song(binding.mainMiniplayerTitleTv.text.toString(), binding.mainMiniplayerSingerTv.text.toString(), 0, 60, false) + val song = Song(binding.mainMiniplayerTitleTv.text.toString(), binding.mainMiniplayerSingerTv.text.toString(), 0, 60, false, "music_lilac") binding.mainPlayerCl.setOnClickListener{ val intent = Intent(this, SongActivity::class.java) @@ -25,6 +31,7 @@ class MainActivity : AppCompatActivity() { intent.putExtra("second", song.second) intent.putExtra("playTime", song.playTime) intent.putExtra("isPlaying", song.isPlaying) + intent.putExtra("music", song.music) startActivity(intent) } @@ -70,4 +77,24 @@ class MainActivity : AppCompatActivity() { false } } + + private fun setMiniPlayer(song: Song){ + binding.mainMiniplayerTitleTv.text = song.title + binding.mainMiniplayerSingerTv.text = song.singer + binding.mainMiniplayerProgressSb.progress = (song.second*100000)/song.playTime + } + + override fun onStart() { + super.onStart() + val sharedPreferences = getSharedPreferences("song", MODE_PRIVATE) + val songJson = sharedPreferences.getString("songData", null) + + song = if(songJson == null){ + Song("라일락", "아이유(IU)", 0, 60, false, "music_lilac") + } else { + gson.fromJson(songJson, Song::class.java) + } + + setMiniPlayer(song) + } } \ No newline at end of file diff --git "a/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/Song.kt" "b/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/Song.kt" index bb6118f..c1c924b 100644 --- "a/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/Song.kt" +++ "b/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/Song.kt" @@ -7,5 +7,6 @@ data class Song( var singer: String = "", var second: Int = 0, var playTime: Int = 0, - var isPlaying: Boolean = false + var isPlaying: Boolean = false, + var music: String = "" ) diff --git "a/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/SongActivity.kt" "b/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/SongActivity.kt" index f4bf4de..f0eb3f7 100644 --- "a/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/SongActivity.kt" +++ "b/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/java/com/example/flo/SongActivity.kt" @@ -1,12 +1,15 @@ package com.example.flo +import android.media.MediaPlayer import android.os.Bundle import android.os.PersistableBundle import android.util.Log import android.view.LayoutInflater +import android.view.MenuInflater import android.view.View import androidx.appcompat.app.AppCompatActivity import com.example.flo.databinding.ActivitySongBinding +import com.google.gson.Gson import java.util.Timer class SongActivity : AppCompatActivity() { @@ -14,6 +17,8 @@ class SongActivity : AppCompatActivity() { lateinit var binding: ActivitySongBinding lateinit var song: Song lateinit var timer: Timer + private var mediaplayer: MediaPlayer? = null + private var gson: Gson = Gson() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -40,11 +45,6 @@ class SongActivity : AppCompatActivity() { } - override fun onDestroy() { - super.onDestroy() - timer.interrupt() - } - private fun initSong(){ if(intent.hasExtra("title") && intent.hasExtra("singer")){ @@ -53,7 +53,8 @@ class SongActivity : AppCompatActivity() { intent.getStringExtra("singer")!!, intent.getIntExtra("second", 0), intent.getIntExtra("playTime", 0), - intent.getBooleanExtra("isPlaying", false) + intent.getBooleanExtra("isPlaying", false), + intent.getStringExtra("music")!! ) } startTimer() @@ -65,7 +66,8 @@ class SongActivity : AppCompatActivity() { binding.songStartTimeTv.text = String.format("%02d:%02d",song.second / 60, song.second % 60) binding.songEndTimeTv.text = String.format("%02d:%02d",song.playTime / 60, song.playTime % 60) binding.songProgressSb.progress = (song.second * 1000 / song.playTime) - + val music = resources.getIdentifier(song.music, "raw", this.packageName) + mediaplayer = MediaPlayer.create(this, music ) setPlayerStatus(song.isPlaying) } @@ -75,10 +77,14 @@ class SongActivity : AppCompatActivity() { if(isPlaying){ binding.songMiniplayerIv.visibility = View.GONE binding.songPauseIv.visibility = View.VISIBLE + mediaplayer?.start() } else { binding.songMiniplayerIv.visibility = View.VISIBLE binding.songPauseIv.visibility = View.GONE + if(mediaplayer?.isPlaying == true){ + mediaplayer?.pause() + } } } @@ -126,5 +132,24 @@ class SongActivity : AppCompatActivity() { } } + + override fun onPause() { + super.onPause() + setPlayerStatus(false) + song.second = ((binding.songProgressSb.progress * song.playTime)/100)/1000 + val sharedPreferences = getSharedPreferences("song", MODE_PRIVATE) + val editor = sharedPreferences.edit() + val songJson = gson.toJson(song) + editor.putString("songData", songJson) + + editor.apply() + } + + override fun onDestroy() { + super.onDestroy() + timer.interrupt() + mediaplayer?.release() + mediaplayer = null + } } diff --git "a/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/res/layout/fragment_home.xml" "b/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/res/layout/fragment_home.xml" index d040bd8..a7f3e3f 100644 --- "a/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/res/layout/fragment_home.xml" +++ "b/\353\213\211-\354\204\234\354\244\200\354\235\265/app/src/main/res/layout/fragment_home.xml" @@ -213,139 +213,139 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@id/home_pannel_background_iv" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -358,15 +358,15 @@ - - - - - - - - - + + app:layout_constraintTop_toBottomOf="@id/home_today_music_album_rv"/> true + + + \ No newline at end of file