Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
49fd385
Feat: 2주차 미션
modzivv Oct 7, 2024
c2feb5f
Remove: Group 468.svg 파일 삭제
modzivv Oct 7, 2024
63e52aa
Refator: SplashScreen API -> SplashActivity 대체
modzivv Oct 7, 2024
9547b65
Feat: Fragment 전환 시 애니메이션 방향 개선
modzivv Oct 13, 2024
42618a9
Feat: 1주차 강의 실습
modzivv Oct 13, 2024
35f063c
Feat: BottomNavigation 템플릿 적용
modzivv Oct 13, 2024
63d5063
Feat: 노래 재생(activity_song), 앨범 정보(fragment_album) XML 레이아웃 작성
modzivv Oct 13, 2024
aa4fc7b
Feat: HomeFragment <-> AlbumFragment 간 전환 기능 구현
modzivv Oct 13, 2024
efd9e10
Feat: MainActivity <-> SongActivity 간 전환 기능 구현
modzivv Oct 13, 2024
8273be9
Feat: 3주차 미션 Activity 간 데이터 전달 및 이미지 변경 기능 추가
modzivv Nov 6, 2024
4710b99
Feat: 3주차 미션 Fragment 화면에 ViewPager 및 TabLayout 구현
modzivv Nov 6, 2024
4e0ba48
Feat: 3주차 미션 HomeFragment에 ViewPager와 자동 슬라이드, Indicator 추가
modzivv Nov 6, 2024
a5909ab
Feat: 4주차 미션 SongActivity에 Timer Seekbar 기능 추가
modzivv Nov 6, 2024
b8099f0
Feat: 4주차 미션 Coroutine 기반 스톱워치 기능 구현
modzivv Nov 6, 2024
f1b639a
Feat: 강의 수강 후 실습 코드 추가
modzivv Nov 10, 2024
2ef8e34
Feat: 5주차 미션 SongActivity 한 곡 재생 버튼 클릭 시 스레드 재시작 구현
modzivv Nov 10, 2024
aefa0fe
Init: 메모장 앱 프로젝트 생성
modzivv Nov 10, 2024
9973264
Feat: 5주차 미션 생명주기를 활용한 메모장 앱 기능 구현
modzivv Nov 10, 2024
bd92669
Feat: 5주차 미션 MainActivity SeekBar 구현 및 Song 진행 시간 연동
modzivv Nov 10, 2024
ecb359b
Feat: 6주차 강의 수강 후 실습 코드 추가
modzivv Nov 17, 2024
ca2977c
Feat: 6주차 미션 SavedSongFragment RecyclerView를 활용한 보관함 화면 만들기 구현
modzivv Nov 17, 2024
cd054c2
Feat: 6주차 미션 SavedSongFragment 더보기 버튼 클릭 시 아이템 삭제 기능 구현
modzivv Nov 17, 2024
b61c0e2
Feat: 6주차 미션 오늘 발매 음악 Play 버튼 클릭 시 MiniPlayer 재생 기능 구현
modzivv Nov 17, 2024
3b974d5
Feat: 6주차 미션 SavedSongFragment RecyclerView 스위치 상태 관리 문제 해결
modzivv Nov 17, 2024
be4a755
Init: RecyclerView 실습 프로젝트 생성
modzivv Nov 17, 2024
ff9bccc
Feat: 6주차 미션 RecyclerView 클론 코딩
modzivv Nov 17, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions Heather/.gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
.DS_Store
.DS_Store
../.DS_Store
15 changes: 15 additions & 0 deletions Heather/FLOClone/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
*.iml
.gradle
/local.properties
/.idea/caches
/.idea/libraries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
/.idea/assetWizardSettings.xml
.DS_Store
/build
/captures
.externalNativeBuild
.cxx
local.properties
3 changes: 3 additions & 0 deletions Heather/FLOClone/.idea/.gitignore

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

26 changes: 26 additions & 0 deletions Heather/FLOClone/.idea/appInsightsSettings.xml

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

6 changes: 6 additions & 0 deletions Heather/FLOClone/.idea/compiler.xml

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

10 changes: 10 additions & 0 deletions Heather/FLOClone/.idea/deploymentTargetSelector.xml

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

19 changes: 19 additions & 0 deletions Heather/FLOClone/.idea/gradle.xml

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

6 changes: 6 additions & 0 deletions Heather/FLOClone/.idea/kotlinc.xml

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

10 changes: 10 additions & 0 deletions Heather/FLOClone/.idea/migrations.xml

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

9 changes: 9 additions & 0 deletions Heather/FLOClone/.idea/misc.xml

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

7 changes: 7 additions & 0 deletions Heather/FLOClone/.idea/vcs.xml

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

1 change: 1 addition & 0 deletions Heather/FLOClone/app/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
54 changes: 54 additions & 0 deletions Heather/FLOClone/app/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
}

android {
namespace = "com.example.floclone"
compileSdk = 34

defaultConfig {
applicationId = "com.example.floclone"
minSdk = 34
targetSdk = 34
versionCode = 1
versionName = "1.0"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
release {
isMinifyEnabled = false
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
buildFeatures {
viewBinding = true
}
}

dependencies {

implementation(libs.androidx.core.ktx)
implementation(libs.androidx.appcompat)
implementation(libs.material)
implementation(libs.androidx.activity)
implementation(libs.androidx.constraintlayout)
implementation("me.relex:circleindicator:2.1.6")
implementation("com.google.code.gson:gson:2.11.0")
implementation("androidx.core:core-splashscreen:1.0.0")
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
}
21 changes: 21 additions & 0 deletions Heather/FLOClone/app/proguard-rules.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.example.floclone

import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4

import org.junit.Test
import org.junit.runner.RunWith

import org.junit.Assert.*

/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("com.example.floclone", appContext.packageName)
}
}
30 changes: 30 additions & 0 deletions Heather/FLOClone/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">

<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.FLOClone"
tools:targetApi="31">
<activity
android:name=".SongActivity"
android:exported="false" />
<activity
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.App.SplashScreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>
10 changes: 10 additions & 0 deletions Heather/FLOClone/app/src/main/java/com/example/floclone/Album.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.example.floclone

import java.util.*

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
@@ -0,0 +1,53 @@
package com.example.floclone

import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.google.android.material.tabs.TabLayoutMediator
import com.example.floclone.databinding.FragmentAlbumBinding
import com.google.gson.Gson

class AlbumFragment : Fragment() {

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

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


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

// 뒤로가기 버튼
binding.albumBackIv.setOnClickListener {
(context as MainActivity).supportFragmentManager.beginTransaction()
.replace(R.id.main_frm, HomeFragment()).commitAllowingStateLoss()
}

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

// ViewPager랑 TabLayout 연결
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.albumMusicTitleTv.text = album.title.toString()
binding.albumSingerNameTv.text = album.singer.toString()
}

}
Loading