diff --git "a/.github/ISSUE_TEMPLATE/\354\230\244\354\273\264\354\231\204---\353\252\250\353\215\230-\354\225\210\353\223\234\353\241\234\354\235\264\353\223\234---jetpack-compose-\354\236\205\353\254\270-\355\205\234\355\224\214\353\246\277.md" "b/.github/ISSUE_TEMPLATE/\354\230\244\354\273\264\354\231\204---\353\252\250\353\215\230-\354\225\210\353\223\234\353\241\234\354\235\264\353\223\234---jetpack-compose-\354\236\205\353\254\270-\355\205\234\355\224\214\353\246\277.md" deleted file mode 100644 index 92393a9..0000000 --- "a/.github/ISSUE_TEMPLATE/\354\230\244\354\273\264\354\231\204---\353\252\250\353\215\230-\354\225\210\353\223\234\353\241\234\354\235\264\353\223\234---jetpack-compose-\354\236\205\353\254\270-\355\205\234\355\224\214\353\246\277.md" +++ /dev/null @@ -1,21 +0,0 @@ ---- -name: '오컴완 : 모던 안드로이드 - Jetpack Compose 입문 템플릿' -about: 오컴완 [모던 안드로이드 - Jetpack Compose 입문] 스터디용 이슈 템플릿 -title: "[WEEK0] Title" -labels: LECTURE ▶️ -assignees: b1urrrr - ---- - -``` -N주차 학습 기간 : ~ 00.00.00. (요일) -``` -# TO-DO LIST -### 섹션 N : -- [ ] Todo1 -- [ ] Todo2 -- [ ] Todo3 -### 섹션 N : -- [ ] Todo1 -- [ ] Todo2 -- [ ] Todo3 diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 4e47698..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,20 +0,0 @@ -- #issue -## *✅ Completed Tasks* -### subtitle -- [ ] todo1 - - [ ] todo 1-1 [🔗]() - - [ ] todo 1-2 [🔗]() -- [ ] todo 2 [🔗]() -- [ ] todo 3 [🔗]() -
- -## *📸 Screenshot* -| task1 | task2 | task3 | -| :---: | :---: | :---: | -| | | | -
- -## *📢 To Reviewers* -- pr point1 -- pr point2 -- pr point3 diff --git a/README.md b/README.md deleted file mode 100644 index c6e155a..0000000 --- a/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# 오컴완 스터디 -``` -오늘 -컴포즈 -완료 -``` -
- -## 📍 STUDY PROGRESS -### [모던 안드로이드 - Jetpack Compose 입문](https://www.inflearn.com/course/%EB%AA%A8%EB%8D%98-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%BB%B4%ED%8F%AC%EC%A6%88#curriculum) -| Week | Chapter | Title | Date | Link | -| :--: | :-----: | :---: | :--: | :--: | - -
- -## 📍 COMMIT CONVENTION -- ✨ **[FEAT]** : 새로운 기능 구현 -- ✅ **[MOD]** : 코드 수정 및 내부 파일 수정 -- ➕ **[ADD]** : 부수적인 코드 추가 및 라이브러리 추가, 새로운 파일 생성 -- 🎀 **[CHORE]** : 버전 코드 수정, 패키지 구조 변경, 타입 및 변수명 변경 등의 작은 작업 -- ⚰️ **[DEL]** : 쓸모없는 코드나 파일 삭제 -- 💄 **[UI]** : UI 작업 -- 🔨 **[FIX]** : 버그 및 오류 해결 -- 🚑️ **[HOTFIX]** : issue나 QA에서 문의된 급한 버그 및 오류 해결 -- 🔀 **[MERGE]** : 다른 브랜치와의 MERGE -- 🚚 **[MOVE]** : 프로젝트 내 파일이나 코드의 이동 -- ⏪️ **[RENAME]** : 파일 이름 변경 -- ♻️ **[REFACTOR]** : 전면 수정 -- 📝 **[DOCS]** : README나 WIKI 등의 문서 개정 diff --git a/modern-android-compose/section00/.gitignore b/modern-android-compose/section00/.gitignore deleted file mode 100644 index 876d12e..0000000 --- a/modern-android-compose/section00/.gitignore +++ /dev/null @@ -1,277 +0,0 @@ -# Created by https://www.toptal.com/developers/gitignore/api/android,androidstudio,kotlin,java,macos,windows -# Edit at https://www.toptal.com/developers/gitignore?templates=android,androidstudio,kotlin,java,macos,windows - -### Android ### -# Gradle files -.gradle/ -build/ - -# Local configuration file (sdk path, etc) -local.properties - -# Log/OS Files -*.log - -# Android Studio generated files and folders -captures/ -.externalNativeBuild/ -.cxx/ -*.apk -output.json - -# Android Studio -/*/build/ -/*/local.properties -/*/out -/*/*/build -/*/*/production -*.ipr -*~ -*.swp - -# IntelliJ -*.iml -.idea/ -misc.xml -deploymentTargetDropDown.xml -render.experimental.xml -.gradle -/local.properties -/.idea/workspace.xml -/.idea/libraries -.DS_Store -/build -/captures -.externalNativeBuild - -# Keystore files -*.jks -*.keystore - -# Google Services (e.g. APIs or Firebase) -google-services.json - -# Android Profiling -*.hprof - -### Android Patch ### -gen-external-apklibs - -# Replacement of .externalNativeBuild directories introduced -# with Android Studio 3.5. - -### Java ### -# Compiled class file -*.class - -# Log file - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.nar -*.ear -*.zip -*.tar.gz -*.rar - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* -replay_pid* - -### Kotlin ### -# Compiled class file - -# Log file - -# BlueJ files - -# Mobile Tools for Java (J2ME) - -# Package Files # - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml - -### macOS ### -# General -.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon - - -# Thumbnails -._* - -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent - -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - -### macOS Patch ### -# iCloud generated files -*.icloud - -### Windows ### -# Windows thumbnail cache files -Thumbs.db -Thumbs.db:encryptable -ehthumbs.db -ehthumbs_vista.db - -# Dump file -*.stackdump - -# Folder config file -[Dd]esktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msix -*.msm -*.msp - -# Windows shortcuts -*.lnk - -### AndroidStudio ### -# Covers files to be ignored for android development using Android Studio. - -# Built application files -*.ap_ -*.aab - -# Files for the ART/Dalvik VM -*.dex - -# Java class files - -# Generated files -bin/ -gen/ -out/ - -# Gradle files -.gradle - -# Signing files -.signing/ - -# Local configuration file (sdk path, etc) - -# Proguard folder generated by Eclipse -proguard/ - -# Log Files - -# Android Studio -/*/build/ -/*/local.properties -/*/out -/*/*/build -/*/*/production -.navigation/ -*.ipr -*~ -*.swp - -# Keystore files - -# Google Services (e.g. APIs or Firebase) -# google-services.json - -# Android Patch - -# External native build folder generated in Android Studio 2.2 and later -.externalNativeBuild - -# NDK -obj/ - -# IntelliJ IDEA -*.iws -/out/ - -# User-specific configurations -.idea/caches/ -.idea/libraries/ -.idea/shelf/ -.idea/workspace.xml -.idea/tasks.xml -.idea/.name -.idea/compiler.xml -.idea/copyright/profiles_settings.xml -.idea/encodings.xml -.idea/misc.xml -.idea/modules.xml -.idea/scopes/scope_settings.xml -.idea/dictionaries -.idea/vcs.xml -.idea/jsLibraryMappings.xml -.idea/datasources.xml -.idea/dataSources.ids -.idea/sqlDataSources.xml -.idea/dynamic.xml -.idea/uiDesigner.xml -.idea/assetWizardSettings.xml -.idea/gradle.xml -.idea/jarRepositories.xml -.idea/navEditor.xml - -# Legacy Eclipse project files -.classpath -.project -.cproject -.settings/ - -# Mobile Tools for Java (J2ME) - -# Package Files # - -# virtual machine crash logs (Reference: http://www.java.com/en/download/help/error_hotspot.xml) - -## Plugin-specific files: - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Mongo Explorer plugin -.idea/mongoSettings.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -### AndroidStudio Patch ### - -!/gradle/wrapper/gradle-wrapper.jar - -# End of https://www.toptal.com/developers/gitignore/api/android,androidstudio,kotlin,java,macos,windows \ No newline at end of file diff --git a/modern-android-compose/section00/app/.gitignore b/modern-android-compose/section00/app/.gitignore deleted file mode 100644 index 42afabf..0000000 --- a/modern-android-compose/section00/app/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/modern-android-compose/section00/app/build.gradle.kts b/modern-android-compose/section00/app/build.gradle.kts deleted file mode 100644 index b19e4cb..0000000 --- a/modern-android-compose/section00/app/build.gradle.kts +++ /dev/null @@ -1,48 +0,0 @@ -plugins { - id("com.android.application") - id("org.jetbrains.kotlin.android") -} - -android { - namespace = "com.ocomwan.kotlinbasics" - compileSdk = 33 - - defaultConfig { - applicationId = "com.ocomwan.kotlinbasics" - minSdk = 28 - targetSdk = 33 - 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" - } -} - -dependencies { - - implementation("androidx.core:core-ktx:1.9.0") - implementation("androidx.appcompat:appcompat:1.6.1") - implementation("com.google.android.material:material:1.8.0") - implementation("androidx.constraintlayout:constraintlayout:2.1.4") - testImplementation("junit:junit:4.13.2") - androidTestImplementation("androidx.test.ext:junit:1.1.5") - androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") - implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2") -} diff --git a/modern-android-compose/section00/app/proguard-rules.pro b/modern-android-compose/section00/app/proguard-rules.pro deleted file mode 100644 index 481bb43..0000000 --- a/modern-android-compose/section00/app/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# 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 \ No newline at end of file diff --git a/modern-android-compose/section00/app/src/androidTest/java/com/ocomwan/kotlinbasics/ExampleInstrumentedTest.kt b/modern-android-compose/section00/app/src/androidTest/java/com/ocomwan/kotlinbasics/ExampleInstrumentedTest.kt deleted file mode 100644 index da85f38..0000000 --- a/modern-android-compose/section00/app/src/androidTest/java/com/ocomwan/kotlinbasics/ExampleInstrumentedTest.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.ocomwan.kotlinbasics - -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.ocomwan.kotlinbasics", appContext.packageName) - } -} \ No newline at end of file diff --git a/modern-android-compose/section00/app/src/main/AndroidManifest.xml b/modern-android-compose/section00/app/src/main/AndroidManifest.xml deleted file mode 100644 index 23e9b08..0000000 --- a/modern-android-compose/section00/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/modern-android-compose/section00/app/src/main/java/com/ocomwan/kotlinbasics/Main.kt b/modern-android-compose/section00/app/src/main/java/com/ocomwan/kotlinbasics/Main.kt deleted file mode 100644 index 49eae5a..0000000 --- a/modern-android-compose/section00/app/src/main/java/com/ocomwan/kotlinbasics/Main.kt +++ /dev/null @@ -1,316 +0,0 @@ -package com.ocomwan.kotlinbasics - -import java.util.Scanner -import kotlin.math.max -import kotlin.math.min -import kotlin.random.Random - -const val num = 20 // Compile Time Constant - -fun main() { - practiceCallbackFunction() -} - -private fun practicePrint() { - println("Hello World") - print("Hello World") -} - -private fun practiceVariablesAndConstants() { - var i = 10 - var name = "채연" - var point = 3.3 - - i = 20 - - val num = 20 - // num = 30 (X) -} - -private fun practiceTypeConversion() { - var i = 10 - var l = 20L - - l = i.toLong() - i = l.toInt() - - var name = "" - name = i.toString() - - val name2 = "10" - i = name2.toInt() -} - -private fun practiceString() { - var name = "hello" - print(name.uppercase()) - print(name.lowercase()) - print(name[0]) - - name = "채연" - print("제 이름은 ${name}입니다.") - print("제 이름은 ${name + 10}입니다.") -} - -private fun practiceMaxAndMin() { - val i = 10 - val j = 20 - - print(max(i, j)) - print(min(i, j)) -} - -private fun practiceRandom() { - var randomNumber = Random.nextInt() - print(randomNumber) - - randomNumber = Random.nextInt(0, 100) // 0 ~ 99 - print(randomNumber) - - val randomDouble = Random.nextDouble(0.0, 1.0) // 0.0 ~ 0.9999... - print(randomDouble) -} - -private fun practiceKeyboardInput() { - val reader = Scanner(System.`in`) - - val numberInput = reader.nextInt() - println(numberInput) - val stringInput = reader.next() - println(stringInput) -} - -private fun practiceConditionalExpression() { - val i = 5 - if (i > 10) { - print("10보다 크다") - } else if (i > 5) { - print("5보다 크다") - } else { - print("") - } - - val result = when { - i > 10 -> "10보다 크다" - i > 5 -> "5보다 크다" - else -> "!!!" - } - println(result) - - val booleanResult = if (i > 10) true else false - println(booleanResult) -} - -private fun practiceLoop() { - val items = listOf(1, 2, 3, 4, 5) - - for (item in items) { - print(item) - } - - items.forEach { item -> - print(item) - } - - // for (int i = 0; i < items.length; i++) - for (i in 0..(items.size - 1)) { - print(items[i]) - } - - for (i in 0 until items.size) { - print(items[i]) - - break - continue - } -} - -private fun practiceList() { - val items = listOf(1, 2, 3, 4, 5) - -// items.add() - - val mutableItems = mutableListOf(1, 2, 3, 4, 5) - mutableItems.add(6) - mutableItems.remove(3) -} - -private fun practiceArray() { - val items = arrayOf(1, 2, 3) - items.size - items.get(0) - items.set(0, 10) // Java - items[0] = 10 // Kotlin - - // List를 활용하는 것이 권장됨 - - try { - val item = items[4] - } catch (e: Exception) { - print(e.message) - } -} - -private fun practiceNullSafety() { - var name: String? = null - name = "채연" - name = null - - var name2: String = "" - if (name != null) { - name2 = name - } - - name2 = name!! - - name?.let { - name2 = name - } -} - -private fun practiceFunction() { - // Method와 Function의 차이점 - print(sum(10, 20)) - print(sum(b = 20, a = 30)) // 순서를 바꿔도 괜찮음. 명시적. 가독성 향상. -} - -// Top-Level Function : 모든 파일에서 사용 가능 -fun sum(a: Int, b: Int, c: Int = 0): Int { - return a + b + c -} - -fun sum2(a: Int, b: Int, c: Int = 0) = a + b + c - -// Java Method Overload -// fun sum(a: Int, b: Int) = a + b -// fun sum(a: Int, b: Int, c: Int) = a + b + c - -private fun practiceClassDataClassGetterSetter() { - val john = Person("John", 20) - val john2 = Person("John", 20) -// print(john.name) - print(john.age) - -// john.name = "Bell" - john.age = 24 - - println(john) - println(john2) - println(john == john2) // false - println(john === john2) -// john.hobby = "탁구" -} - -// data class : equals, hashCode 등의 함수 자동 재정의 -data class Person( - private val name: String, // getter 미제공 - var age: Int, -) { - var hobby = "축구" - private set // setter 미제공 - get() = "취미 : $field" - - // 생성할 때마다 실행 - init { - print("init") - } - - fun some() { - hobby = "농구" - } -} - -private fun practiceExtends() { - val dog = Dog() - val cat = Cat() - - println(dog.move()) - println(cat.move()) -} - -abstract class Animal { - // 코틀린은 open 키워드를 붙여야 override 가능 - open fun move() { - println("이동!") - } -} - -class Dog : Animal(), Drawable { - override fun move() { - println("껑충? 강아지가 왜 껑충 뜀") - } - - override fun draw() { - println("강아지 그리기") - } -} - -class Cat : Animal(), Drawable { - override fun move() { - println("고양이는 살금 ㅇㅈ") - } - - override fun draw() { - println("고양이 그리기") - } -} - -// 기본 클래스는 상속 불가능, open 키워드 필요 -open class Human - -class SuperMan : Human() - -private fun practiceInterface() { - val dog = Dog() - val cat = Cat() - - println(dog.draw()) - println(cat.draw()) -} - -interface Drawable { - fun draw() -} - -private fun practiceTypeCheckIs() { - val dog: Animal = Dog() - val cat = Cat() - - dog.move() -// dog.draw() -> Animal 타입 상태에서는 사용 불가능 - - if (dog is Dog) { // true - println("멍멍이") - dog.move() - dog.draw() // Dog로 타입 변환된 후에는 사용 가능 - } -// if (dog is Cat) println("고양이") -> incompatible type check - - dog as Cat // as : 타입 강제 변환 -} - -private fun practiceGeneric() { - val box = Box(10) - val box2 = Box("박스") - - println(box.value) - println(box2.value) -} - -class Box(var value: T) -// class Box(value: T) -> val 또는 var 지정하지 않으면 getter, setter가 제공되지 않아서 value 호출 불가능 (그냥 인자) - -// 콜백 함수 타입 : input과 output 정의: -private fun practiceCallbackFunction() { - myFunc(10) { - println("콜백 함수 호출") - } // 별다른 매개변수가 없다면 소괄호 생략 가능 - - myFunc(20) -} - -fun myFunc(a: Int, callback: () -> Unit = { /* default */ }) { // input과 output이 없는 함수 - println("함수 시작!") - callback - println("함수 끝!") -} diff --git a/modern-android-compose/section00/app/src/main/java/com/ocomwan/kotlinbasics/MainActivity.kt b/modern-android-compose/section00/app/src/main/java/com/ocomwan/kotlinbasics/MainActivity.kt deleted file mode 100644 index c604c0e..0000000 --- a/modern-android-compose/section00/app/src/main/java/com/ocomwan/kotlinbasics/MainActivity.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.ocomwan.kotlinbasics - -import android.os.Bundle -import androidx.appcompat.app.AppCompatActivity -import androidx.lifecycle.lifecycleScope -import kotlinx.coroutines.launch - -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - -// practiceSuspendFunctionAndCoroutine(10) -> coroutine scope 내부에서 호출해야함 - lifecycleScope.launch { - practiceSuspendFunctionAndCoroutine(100) { - // 콜백 함수 내용 - } - } - } -} - -// suspend function : 정지 함수로 끝날 때까지 대기. 메인 스레드에서 실행 불가능 -// - suspend 함수 내부 실행 -// - coroutine scope 내부 실행 -suspend fun practiceSuspendFunctionAndCoroutine(a: Int, callback: () -> Unit = { }) { - println("함수 시작!") - callback() - println("함수 끝!") -} diff --git a/modern-android-compose/section00/app/src/main/res/drawable/ic_launcher_background.xml b/modern-android-compose/section00/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 07d5da9..0000000 --- a/modern-android-compose/section00/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modern-android-compose/section00/app/src/main/res/drawable/ic_launcher_foreground.xml b/modern-android-compose/section00/app/src/main/res/drawable/ic_launcher_foreground.xml deleted file mode 100644 index 2b068d1..0000000 --- a/modern-android-compose/section00/app/src/main/res/drawable/ic_launcher_foreground.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/modern-android-compose/section00/app/src/main/res/layout/activity_main.xml b/modern-android-compose/section00/app/src/main/res/layout/activity_main.xml deleted file mode 100644 index 0b15a20..0000000 --- a/modern-android-compose/section00/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - \ No newline at end of file diff --git a/modern-android-compose/section00/app/src/main/res/mipmap-anydpi/ic_launcher.xml b/modern-android-compose/section00/app/src/main/res/mipmap-anydpi/ic_launcher.xml deleted file mode 100644 index 6f3b755..0000000 --- a/modern-android-compose/section00/app/src/main/res/mipmap-anydpi/ic_launcher.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/modern-android-compose/section00/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/modern-android-compose/section00/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml deleted file mode 100644 index 6f3b755..0000000 --- a/modern-android-compose/section00/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/modern-android-compose/section00/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/modern-android-compose/section00/app/src/main/res/mipmap-hdpi/ic_launcher.webp deleted file mode 100644 index c209e78..0000000 Binary files a/modern-android-compose/section00/app/src/main/res/mipmap-hdpi/ic_launcher.webp and /dev/null differ diff --git a/modern-android-compose/section00/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/modern-android-compose/section00/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp deleted file mode 100644 index b2dfe3d..0000000 Binary files a/modern-android-compose/section00/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp and /dev/null differ diff --git a/modern-android-compose/section00/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/modern-android-compose/section00/app/src/main/res/mipmap-mdpi/ic_launcher.webp deleted file mode 100644 index 4f0f1d6..0000000 Binary files a/modern-android-compose/section00/app/src/main/res/mipmap-mdpi/ic_launcher.webp and /dev/null differ diff --git a/modern-android-compose/section00/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/modern-android-compose/section00/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp deleted file mode 100644 index 62b611d..0000000 Binary files a/modern-android-compose/section00/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp and /dev/null differ diff --git a/modern-android-compose/section00/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/modern-android-compose/section00/app/src/main/res/mipmap-xhdpi/ic_launcher.webp deleted file mode 100644 index 948a307..0000000 Binary files a/modern-android-compose/section00/app/src/main/res/mipmap-xhdpi/ic_launcher.webp and /dev/null differ diff --git a/modern-android-compose/section00/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/modern-android-compose/section00/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp deleted file mode 100644 index 1b9a695..0000000 Binary files a/modern-android-compose/section00/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/modern-android-compose/section00/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/modern-android-compose/section00/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp deleted file mode 100644 index 28d4b77..0000000 Binary files a/modern-android-compose/section00/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp and /dev/null differ diff --git a/modern-android-compose/section00/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/modern-android-compose/section00/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp deleted file mode 100644 index 9287f50..0000000 Binary files a/modern-android-compose/section00/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/modern-android-compose/section00/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/modern-android-compose/section00/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp deleted file mode 100644 index aa7d642..0000000 Binary files a/modern-android-compose/section00/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and /dev/null differ diff --git a/modern-android-compose/section00/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/modern-android-compose/section00/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp deleted file mode 100644 index 9126ae3..0000000 Binary files a/modern-android-compose/section00/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/modern-android-compose/section00/app/src/main/res/values-night/themes.xml b/modern-android-compose/section00/app/src/main/res/values-night/themes.xml deleted file mode 100644 index 922186b..0000000 --- a/modern-android-compose/section00/app/src/main/res/values-night/themes.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - \ No newline at end of file diff --git a/modern-android-compose/section00/app/src/main/res/values/colors.xml b/modern-android-compose/section00/app/src/main/res/values/colors.xml deleted file mode 100644 index f8c6127..0000000 --- a/modern-android-compose/section00/app/src/main/res/values/colors.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - #FFBB86FC - #FF6200EE - #FF3700B3 - #FF03DAC5 - #FF018786 - #FF000000 - #FFFFFFFF - \ No newline at end of file diff --git a/modern-android-compose/section00/app/src/main/res/values/strings.xml b/modern-android-compose/section00/app/src/main/res/values/strings.xml deleted file mode 100644 index c263ec3..0000000 --- a/modern-android-compose/section00/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Kotlin Basics - \ No newline at end of file diff --git a/modern-android-compose/section00/app/src/main/res/values/themes.xml b/modern-android-compose/section00/app/src/main/res/values/themes.xml deleted file mode 100644 index 0e28f76..0000000 --- a/modern-android-compose/section00/app/src/main/res/values/themes.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - \ No newline at end of file diff --git a/modern-android-compose/section00/app/src/main/res/xml/backup_rules.xml b/modern-android-compose/section00/app/src/main/res/xml/backup_rules.xml deleted file mode 100644 index fa0f996..0000000 --- a/modern-android-compose/section00/app/src/main/res/xml/backup_rules.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - \ No newline at end of file diff --git a/modern-android-compose/section00/app/src/main/res/xml/data_extraction_rules.xml b/modern-android-compose/section00/app/src/main/res/xml/data_extraction_rules.xml deleted file mode 100644 index 9ee9997..0000000 --- a/modern-android-compose/section00/app/src/main/res/xml/data_extraction_rules.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/modern-android-compose/section00/app/src/test/java/com/ocomwan/kotlinbasics/ExampleUnitTest.kt b/modern-android-compose/section00/app/src/test/java/com/ocomwan/kotlinbasics/ExampleUnitTest.kt deleted file mode 100644 index 8974bbd..0000000 --- a/modern-android-compose/section00/app/src/test/java/com/ocomwan/kotlinbasics/ExampleUnitTest.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.ocomwan.kotlinbasics - -import org.junit.Test - -import org.junit.Assert.* - -/** - * Example local unit test, which will execute on the development machine (host). - * - * See [testing documentation](http://d.android.com/tools/testing). - */ -class ExampleUnitTest { - @Test - fun addition_isCorrect() { - assertEquals(4, 2 + 2) - } -} \ No newline at end of file diff --git a/modern-android-compose/section00/build.gradle.kts b/modern-android-compose/section00/build.gradle.kts deleted file mode 100644 index ef164ea..0000000 --- a/modern-android-compose/section00/build.gradle.kts +++ /dev/null @@ -1,5 +0,0 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. -plugins { - id("com.android.application") version "8.1.4" apply false - id("org.jetbrains.kotlin.android") version "1.9.0" apply false -} \ No newline at end of file diff --git a/modern-android-compose/section00/gradle.properties b/modern-android-compose/section00/gradle.properties deleted file mode 100644 index 3c5031e..0000000 --- a/modern-android-compose/section00/gradle.properties +++ /dev/null @@ -1,23 +0,0 @@ -# Project-wide Gradle settings. -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app's APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn -android.useAndroidX=true -# Kotlin code style for this project: "official" or "obsolete": -kotlin.code.style=official -# Enables namespacing of each library's R class so that its R class includes only the -# resources declared in the library itself and none from the library's dependencies, -# thereby reducing the size of the R class for that library -android.nonTransitiveRClass=true \ No newline at end of file diff --git a/modern-android-compose/section00/gradle/wrapper/gradle-wrapper.jar b/modern-android-compose/section00/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index e708b1c..0000000 Binary files a/modern-android-compose/section00/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/modern-android-compose/section00/gradle/wrapper/gradle-wrapper.properties b/modern-android-compose/section00/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 9a6f112..0000000 --- a/modern-android-compose/section00/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Wed Nov 15 23:15:42 KST 2023 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/modern-android-compose/section00/gradlew b/modern-android-compose/section00/gradlew deleted file mode 100644 index 4f906e0..0000000 --- a/modern-android-compose/section00/gradlew +++ /dev/null @@ -1,185 +0,0 @@ -#!/usr/bin/env sh - -# -# Copyright 2015 the original author or authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -exec "$JAVACMD" "$@" diff --git a/modern-android-compose/section00/gradlew.bat b/modern-android-compose/section00/gradlew.bat deleted file mode 100644 index 107acd3..0000000 --- a/modern-android-compose/section00/gradlew.bat +++ /dev/null @@ -1,89 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/modern-android-compose/section00/settings.gradle.kts b/modern-android-compose/section00/settings.gradle.kts deleted file mode 100644 index cb5e690..0000000 --- a/modern-android-compose/section00/settings.gradle.kts +++ /dev/null @@ -1,17 +0,0 @@ -pluginManagement { - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} -dependencyResolutionManagement { - repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) - repositories { - google() - mavenCentral() - } -} - -rootProject.name = "Kotlin Basics" -include(":app") diff --git a/modern-android-compose/section01/app/.gitignore b/modern-android-compose/section01/app/.gitignore deleted file mode 100644 index 42afabf..0000000 --- a/modern-android-compose/section01/app/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/modern-android-compose/section01/app/build.gradle.kts b/modern-android-compose/section01/app/build.gradle.kts deleted file mode 100644 index 2586b92..0000000 --- a/modern-android-compose/section01/app/build.gradle.kts +++ /dev/null @@ -1,72 +0,0 @@ -plugins { - id("com.android.application") - id("org.jetbrains.kotlin.android") -} - -android { - namespace = "com.ocomwan.myapplication" - compileSdk = 34 - - defaultConfig { - applicationId = "com.ocomwan.myapplication" - minSdk = 28 - targetSdk = 34 - versionCode = 1 - versionName = "1.0" - - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - vectorDrawables { - useSupportLibrary = true - } - } - - 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 { - compose = true - } - composeOptions { - kotlinCompilerExtensionVersion = "1.4.3" - } - packaging { - resources { - excludes += "/META-INF/{AL2.0,LGPL2.1}" - } - } -} - -dependencies { - - implementation("androidx.core:core-ktx:1.12.0") - implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2") - implementation("androidx.activity:activity-compose:1.8.2") - implementation(platform("androidx.compose:compose-bom:2023.03.00")) - implementation("androidx.compose.ui:ui") - implementation("androidx.compose.ui:ui-graphics") - implementation("androidx.compose.ui:ui-tooling-preview") - implementation("androidx.compose.material3:material3") - testImplementation("junit:junit:4.13.2") - androidTestImplementation("androidx.test.ext:junit:1.1.5") - androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") - androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00")) - androidTestImplementation("androidx.compose.ui:ui-test-junit4") - debugImplementation("androidx.compose.ui:ui-tooling") - debugImplementation("androidx.compose.ui:ui-test-manifest") - - // Navigation - implementation("androidx.navigation:navigation-compose:2.7.6") -} diff --git a/modern-android-compose/section01/app/proguard-rules.pro b/modern-android-compose/section01/app/proguard-rules.pro deleted file mode 100644 index 481bb43..0000000 --- a/modern-android-compose/section01/app/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# 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 \ No newline at end of file diff --git a/modern-android-compose/section01/app/src/androidTest/java/com/ocomwan/myapplication/ExampleInstrumentedTest.kt b/modern-android-compose/section01/app/src/androidTest/java/com/ocomwan/myapplication/ExampleInstrumentedTest.kt deleted file mode 100644 index 5c58761..0000000 --- a/modern-android-compose/section01/app/src/androidTest/java/com/ocomwan/myapplication/ExampleInstrumentedTest.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.ocomwan.myapplication - -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.ocomwan.myapplication", appContext.packageName) - } -} \ No newline at end of file diff --git a/modern-android-compose/section01/app/src/main/AndroidManifest.xml b/modern-android-compose/section01/app/src/main/AndroidManifest.xml deleted file mode 100644 index 66eca46..0000000 --- a/modern-android-compose/section01/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/modern-android-compose/section01/app/src/main/java/com/ocomwan/myapplication/PracticeActivity.kt b/modern-android-compose/section01/app/src/main/java/com/ocomwan/myapplication/PracticeActivity.kt deleted file mode 100644 index 6c20f63..0000000 --- a/modern-android-compose/section01/app/src/main/java/com/ocomwan/myapplication/PracticeActivity.kt +++ /dev/null @@ -1,253 +0,0 @@ -@file:OptIn( - ExperimentalMaterial3Api::class, - ExperimentalComposeUiApi::class, -) - -package com.ocomwan.myapplication - -import android.os.Bundle -import androidx.activity.ComponentActivity -import androidx.activity.compose.setContent -import androidx.compose.foundation.Image -import androidx.compose.foundation.ScrollState -import androidx.compose.foundation.background -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Favorite -import androidx.compose.material.icons.filled.FavoriteBorder -import androidx.compose.material3.Button -import androidx.compose.material3.Card -import androidx.compose.material3.CardDefaults -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Icon -import androidx.compose.material3.IconButton -import androidx.compose.material3.SnackbarHostState -import androidx.compose.material3.Text -import androidx.compose.material3.TextField -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.ExperimentalComposeUiApi -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.platform.LocalSoftwareKeyboardController -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import com.ocomwan.myapplication.ui.theme.MyApplicationTheme -import kotlinx.coroutines.launch - -class PracticeActivity : ComponentActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContent { - MyApplicationTheme { - PracticeNavigation() - } - } - } - - @Composable - fun PracticeColumn() { - Column( - modifier = Modifier - .fillMaxSize() - .background(color = Color.Blue) - .padding(16.dp), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.SpaceBetween, - ) { - Text(stringResource(R.string.section1_hello)) - Text(stringResource(R.string.section1_world)) - } - } - - @Composable - fun PracticeBox() { - Box( - modifier = Modifier - .background(color = Color.Green) - .fillMaxWidth() - .height(200.dp), - ) { - Text(stringResource(R.string.section1_today_compose)) - Box( - modifier = Modifier - .fillMaxSize() - .padding(16.dp), - contentAlignment = Alignment.BottomEnd, - ) { - Text(stringResource(R.string.section1_complete)) - } - } - } - - @Composable - fun PracticeListAndLazyColumn() { -// val scrollState = rememberScrollState() -// ListUsingColum(scrollState = scrollState) - ListUsingLazyColumn() - } - - @Composable - private fun ListUsingColum(scrollState: ScrollState) { - Column( - modifier = Modifier - .background(color = Color.Green) - .fillMaxWidth() - .verticalScroll( - state = scrollState, - ), - ) { - for (i in 1..50) { - Text(getString(R.string.section1_letter, i.toString())) - } - } - } - - @Composable - fun ListUsingLazyColumn() { - LazyColumn( - modifier = Modifier - .background(color = Color.Green) - .fillMaxWidth(), - contentPadding = PaddingValues(16.dp), - verticalArrangement = Arrangement.spacedBy(8.dp), - ) { - item { - Text(stringResource(R.string.section1_header)) - } - items(50) { index -> - Text(stringResource(R.string.section1_letter, index)) - } - item { - Text(stringResource(R.string.section1_footer)) - } - } - } - - @Composable - fun PracticeImageCardState() { - var isFavorite by rememberSaveable { - mutableStateOf(false) - } - - ImageCard( - modifier = Modifier - .fillMaxWidth(0.5f) - .padding(16.dp), - isFavorite = isFavorite, - ) { favorite -> - isFavorite = favorite - } - } - - @Composable - fun ImageCard( - modifier: Modifier = Modifier, - isFavorite: Boolean, - onTabFavorite: (Boolean) -> Unit, - ) { - Card( - modifier = modifier, - shape = RoundedCornerShape(5.dp), - elevation = CardDefaults.cardElevation( - defaultElevation = 10.dp, - ), - ) { - Box( - modifier = Modifier.height(200.dp), - ) { - Image( - painter = painterResource(id = R.drawable.img_kermit), - contentDescription = stringResource(R.string.section1_kermit_img), - contentScale = ContentScale.Crop, - ) - Box( - modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.TopEnd, - ) { - IconButton(onClick = { onTabFavorite(!isFavorite) }) { - Icon( - imageVector = if (isFavorite) Icons.Default.Favorite else Icons.Default.FavoriteBorder, - contentDescription = stringResource(R.string.section1_favorite), - tint = Color.White, - ) - } - } - } - } - } - - @Composable - fun PracticeTextFieldButtonSnackBar() { - val (inputText, setInputText) = rememberSaveable { - mutableStateOf("") - } - val snackbarHostState = remember { - SnackbarHostState() - } - val coroutineScope = rememberCoroutineScope() - val keyboardController = LocalSoftwareKeyboardController.current - - Column( - modifier = Modifier - .fillMaxSize() - .background(color = Color.White).clickable { - keyboardController?.hide() - }, - verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally, - ) { - TextField( - value = inputText, - onValueChange = setInputText, - ) - Spacer(modifier = Modifier.height(14.dp)) - Button(onClick = { - keyboardController?.hide() - coroutineScope.launch { - snackbarHostState.showSnackbar( - getString( - R.string.section1_input_text, - inputText, - ), - ) - } - }) { - Text(stringResource(R.string.section1_click)) - } - } - } - - @Composable - fun PracticeNavigation() { - } - - @Preview(showBackground = true) - @Composable - fun DefaultPreview() { - MyApplicationTheme { - PracticeTextFieldButtonSnackBar() - } - } -} diff --git a/modern-android-compose/section01/app/src/main/java/com/ocomwan/myapplication/ui/theme/Color.kt b/modern-android-compose/section01/app/src/main/java/com/ocomwan/myapplication/ui/theme/Color.kt deleted file mode 100644 index 4c54da7..0000000 --- a/modern-android-compose/section01/app/src/main/java/com/ocomwan/myapplication/ui/theme/Color.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.ocomwan.myapplication.ui.theme - -import androidx.compose.ui.graphics.Color - -val Purple80 = Color(0xFFD0BCFF) -val PurpleGrey80 = Color(0xFFCCC2DC) -val Pink80 = Color(0xFFEFB8C8) - -val Purple40 = Color(0xFF6650a4) -val PurpleGrey40 = Color(0xFF625b71) -val Pink40 = Color(0xFF7D5260) \ No newline at end of file diff --git a/modern-android-compose/section01/app/src/main/java/com/ocomwan/myapplication/ui/theme/Theme.kt b/modern-android-compose/section01/app/src/main/java/com/ocomwan/myapplication/ui/theme/Theme.kt deleted file mode 100644 index 3093c19..0000000 --- a/modern-android-compose/section01/app/src/main/java/com/ocomwan/myapplication/ui/theme/Theme.kt +++ /dev/null @@ -1,70 +0,0 @@ -package com.ocomwan.myapplication.ui.theme - -import android.app.Activity -import android.os.Build -import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.darkColorScheme -import androidx.compose.material3.dynamicDarkColorScheme -import androidx.compose.material3.dynamicLightColorScheme -import androidx.compose.material3.lightColorScheme -import androidx.compose.runtime.Composable -import androidx.compose.runtime.SideEffect -import androidx.compose.ui.graphics.toArgb -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalView -import androidx.core.view.WindowCompat - -private val DarkColorScheme = darkColorScheme( - primary = Purple80, - secondary = PurpleGrey80, - tertiary = Pink80, -) - -private val LightColorScheme = lightColorScheme( - primary = Purple40, - secondary = PurpleGrey40, - tertiary = Pink40, - - /* Other default colors to override - background = Color(0xFFFFFBFE), - surface = Color(0xFFFFFBFE), - onPrimary = Color.White, - onSecondary = Color.White, - onTertiary = Color.White, - onBackground = Color(0xFF1C1B1F), - onSurface = Color(0xFF1C1B1F), - */ -) - -@Composable -fun MyApplicationTheme( - darkTheme: Boolean = isSystemInDarkTheme(), - // Dynamic color is available on Android 12+ - dynamicColor: Boolean = true, - content: @Composable () -> Unit, -) { - val colorScheme = when { - dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { - val context = LocalContext.current - if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) - } - - darkTheme -> DarkColorScheme - else -> LightColorScheme - } - val view = LocalView.current - if (!view.isInEditMode) { - SideEffect { - val window = (view.context as Activity).window - window.statusBarColor = colorScheme.primary.toArgb() - WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme - } - } - - MaterialTheme( - colorScheme = colorScheme, - typography = Typography, - content = content, - ) -} diff --git a/modern-android-compose/section01/app/src/main/java/com/ocomwan/myapplication/ui/theme/Type.kt b/modern-android-compose/section01/app/src/main/java/com/ocomwan/myapplication/ui/theme/Type.kt deleted file mode 100644 index 395b614..0000000 --- a/modern-android-compose/section01/app/src/main/java/com/ocomwan/myapplication/ui/theme/Type.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.ocomwan.myapplication.ui.theme - -import androidx.compose.material3.Typography -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.unit.sp - -// Set of Material typography styles to start with -val Typography = Typography( - bodyLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 16.sp, - lineHeight = 24.sp, - letterSpacing = 0.5.sp - ) - /* Other default text styles to override - titleLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 22.sp, - lineHeight = 28.sp, - letterSpacing = 0.sp - ), - labelSmall = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 11.sp, - lineHeight = 16.sp, - letterSpacing = 0.5.sp - ) - */ -) \ No newline at end of file diff --git a/modern-android-compose/section01/app/src/main/res/drawable/ic_launcher_background.xml b/modern-android-compose/section01/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index 07d5da9..0000000 --- a/modern-android-compose/section01/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modern-android-compose/section01/app/src/main/res/drawable/ic_launcher_foreground.xml b/modern-android-compose/section01/app/src/main/res/drawable/ic_launcher_foreground.xml deleted file mode 100644 index 2b068d1..0000000 --- a/modern-android-compose/section01/app/src/main/res/drawable/ic_launcher_foreground.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/modern-android-compose/section01/app/src/main/res/drawable/img_kermit.jpg b/modern-android-compose/section01/app/src/main/res/drawable/img_kermit.jpg deleted file mode 100644 index 8da345f..0000000 Binary files a/modern-android-compose/section01/app/src/main/res/drawable/img_kermit.jpg and /dev/null differ diff --git a/modern-android-compose/section01/app/src/main/res/mipmap-anydpi/ic_launcher.xml b/modern-android-compose/section01/app/src/main/res/mipmap-anydpi/ic_launcher.xml deleted file mode 100644 index 6f3b755..0000000 --- a/modern-android-compose/section01/app/src/main/res/mipmap-anydpi/ic_launcher.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/modern-android-compose/section01/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml b/modern-android-compose/section01/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml deleted file mode 100644 index 6f3b755..0000000 --- a/modern-android-compose/section01/app/src/main/res/mipmap-anydpi/ic_launcher_round.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/modern-android-compose/section01/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/modern-android-compose/section01/app/src/main/res/mipmap-hdpi/ic_launcher.webp deleted file mode 100644 index c209e78..0000000 Binary files a/modern-android-compose/section01/app/src/main/res/mipmap-hdpi/ic_launcher.webp and /dev/null differ diff --git a/modern-android-compose/section01/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/modern-android-compose/section01/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp deleted file mode 100644 index b2dfe3d..0000000 Binary files a/modern-android-compose/section01/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp and /dev/null differ diff --git a/modern-android-compose/section01/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/modern-android-compose/section01/app/src/main/res/mipmap-mdpi/ic_launcher.webp deleted file mode 100644 index 4f0f1d6..0000000 Binary files a/modern-android-compose/section01/app/src/main/res/mipmap-mdpi/ic_launcher.webp and /dev/null differ diff --git a/modern-android-compose/section01/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/modern-android-compose/section01/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp deleted file mode 100644 index 62b611d..0000000 Binary files a/modern-android-compose/section01/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp and /dev/null differ diff --git a/modern-android-compose/section01/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/modern-android-compose/section01/app/src/main/res/mipmap-xhdpi/ic_launcher.webp deleted file mode 100644 index 948a307..0000000 Binary files a/modern-android-compose/section01/app/src/main/res/mipmap-xhdpi/ic_launcher.webp and /dev/null differ diff --git a/modern-android-compose/section01/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/modern-android-compose/section01/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp deleted file mode 100644 index 1b9a695..0000000 Binary files a/modern-android-compose/section01/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/modern-android-compose/section01/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/modern-android-compose/section01/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp deleted file mode 100644 index 28d4b77..0000000 Binary files a/modern-android-compose/section01/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp and /dev/null differ diff --git a/modern-android-compose/section01/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/modern-android-compose/section01/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp deleted file mode 100644 index 9287f50..0000000 Binary files a/modern-android-compose/section01/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/modern-android-compose/section01/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/modern-android-compose/section01/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp deleted file mode 100644 index aa7d642..0000000 Binary files a/modern-android-compose/section01/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp and /dev/null differ diff --git a/modern-android-compose/section01/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/modern-android-compose/section01/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp deleted file mode 100644 index 9126ae3..0000000 Binary files a/modern-android-compose/section01/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp and /dev/null differ diff --git a/modern-android-compose/section01/app/src/main/res/values/colors.xml b/modern-android-compose/section01/app/src/main/res/values/colors.xml deleted file mode 100644 index f8c6127..0000000 --- a/modern-android-compose/section01/app/src/main/res/values/colors.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - #FFBB86FC - #FF6200EE - #FF3700B3 - #FF03DAC5 - #FF018786 - #FF000000 - #FFFFFFFF - \ No newline at end of file diff --git a/modern-android-compose/section01/app/src/main/res/values/strings.xml b/modern-android-compose/section01/app/src/main/res/values/strings.xml deleted file mode 100644 index 5394625..0000000 --- a/modern-android-compose/section01/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,14 +0,0 @@ - - My Application - 커밋의 프로필 이미지 - Favorite - HEADER - 글씨 %1$s - FOOTER - 오늘 컴포즈 - 완료 - Hello - World - 클릭 - 입력 : %1$s - \ No newline at end of file diff --git a/modern-android-compose/section01/app/src/main/res/values/themes.xml b/modern-android-compose/section01/app/src/main/res/values/themes.xml deleted file mode 100644 index e48770a..0000000 --- a/modern-android-compose/section01/app/src/main/res/values/themes.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - -