From 3697bcc23cdd551bcac93769eedc24221c3bb73f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A9=E1=84=92=E1=85=B4=E1=84=8B=E1=85=AE?= Date: Sun, 27 Jul 2025 10:58:47 +0900 Subject: [PATCH 1/9] =?UTF-8?q?build:=20gradle,=20sdk,=20library=20?= =?UTF-8?q?=EB=B2=84=EC=A0=84=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 71 ++++++++++++------------ build.gradle | 10 ++-- gradle.properties | 4 +- gradle/wrapper/gradle-wrapper.properties | 3 +- settings.gradle | 1 - 5 files changed, 46 insertions(+), 43 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 0e8164e9..7797b386 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,7 +6,7 @@ plugins { } android { - compileSdk 34 + compileSdk 35 Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) @@ -14,7 +14,7 @@ android { defaultConfig { applicationId "com.dongyang.android.youdongknowme" minSdk 24 - targetSdk 34 + targetSdk 35 versionCode 17 versionName "2.3.1" @@ -44,83 +44,84 @@ android { } dependencies { - implementation 'androidx.core:core-ktx:1.7.0' - implementation 'androidx.appcompat:appcompat:1.4.1' - implementation 'com.google.android.material:material:1.7.0' - implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'androidx.core:core-ktx:1.16.0' + implementation 'androidx.appcompat:appcompat:1.7.1' + implementation 'com.google.android.material:material:1.12.0' + implementation 'androidx.constraintlayout:constraintlayout:2.2.1' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.1' + implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.9.2' testImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.ext:junit:1.1.3' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + androidTestImplementation 'androidx.test.ext:junit:1.2.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1' // preference - implementation 'androidx.preference:preference:1.2.0' + implementation 'androidx.preference:preference-ktx:1.2.1' // Coroutines - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2" // ViewModelScope - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1" + implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.9.2" // Retrofit2 - implementation "com.squareup.retrofit2:retrofit:2.9.0" - implementation "com.squareup.retrofit2:converter-gson:2.9.0" + implementation "com.squareup.retrofit2:retrofit:3.0.0" + implementation "com.squareup.retrofit2:converter-gson:3.0.0" // OkHttp - implementation "com.squareup.okhttp3:okhttp:4.10.0" - implementation "com.squareup.okhttp3:logging-interceptor:4.10.0" - implementation "com.squareup.okhttp3:okhttp-urlconnection:4.9.1" + implementation "com.squareup.okhttp3:okhttp:5.1.0" + implementation "com.squareup.okhttp3:logging-interceptor:5.1.0" + implementation "com.squareup.okhttp3:okhttp-urlconnection:5.1.0" // Gson - implementation 'com.google.code.gson:gson:2.9.0' + implementation 'com.google.code.gson:gson:2.13.1' // Room - implementation 'androidx.room:room-common:2.4.3' - implementation 'androidx.room:room-ktx:2.4.3' - kapt "androidx.room:room-compiler:2.4.3" + implementation 'androidx.room:room-common:2.7.2' + implementation 'androidx.room:room-ktx:2.7.2' + //noinspection KaptUsageInsteadOfKsp + kapt "androidx.room:room-compiler:2.7.2" // Koin - implementation "io.insert-koin:koin-core:3.1.2" - implementation "io.insert-koin:koin-android:3.1.2" + implementation "io.insert-koin:koin-core:4.1.0" + implementation "io.insert-koin:koin-android:4.1.0" // Animation - implementation 'com.daimajia.easing:library:2.0@aar' + implementation 'com.daimajia.easing:library:2.4@aar' implementation 'com.daimajia.androidanimations:library:2.4@aar' // MaterialCalendarView implementation 'com.github.prolificinteractive:material-calendarview:2.0.0' - implementation 'com.jakewharton.threetenabp:threetenabp:1.2.0' + implementation 'com.jakewharton.threetenabp:threetenabp:1.4.9' // Glide - implementation 'com.github.bumptech.glide:glide:4.13.2' - annotationProcessor 'com.github.bumptech.glide:compiler:4.13.2' + implementation 'com.github.bumptech.glide:glide:4.16.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0' // Firebase - implementation platform('com.google.firebase:firebase-bom:30.0.0') + implementation platform('com.google.firebase:firebase-bom:34.0.0') implementation 'com.google.firebase:firebase-analytics' - implementation 'com.google.firebase:firebase-messaging:23.4.1' + implementation 'com.google.firebase:firebase-messaging:25.0.0' // Timber implementation 'com.jakewharton.timber:timber:5.0.1' // Horizontal CalendarView - implementation 'com.github.kizitonwose:CalendarView:1.0.4' + implementation 'com.github.kizitonwose:CalendarView:2.4.1' // Flexbox implementation 'com.google.android.flexbox:flexbox:3.0.0' // Lottie - implementation "com.airbnb.android:lottie:5.2.0" + implementation "com.airbnb.android:lottie:6.6.7" // Navigation - implementation("androidx.navigation:navigation-fragment-ktx:2.5.3") - implementation("androidx.navigation:navigation-ui-ktx:2.5.3") + implementation("androidx.navigation:navigation-fragment-ktx:2.9.2") + implementation("androidx.navigation:navigation-ui-ktx:2.9.2") // MinSdk - coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5' // Window Manager - implementation 'androidx.window:window:1.0.0' + implementation 'androidx.window:window:1.4.0' } diff --git a/build.gradle b/build.gradle index ed4394f2..42988cc2 100644 --- a/build.gradle +++ b/build.gradle @@ -1,11 +1,11 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id 'com.android.application' version '7.4.2' apply false - id 'com.android.library' version '7.4.2' apply false - id 'org.jetbrains.kotlin.android' version '1.6.21' apply false - id "com.google.gms.google-services" version "4.3.14" apply false + id 'com.android.application' version '8.11.1' apply false + id 'com.android.library' version '8.11.1' apply false + id 'org.jetbrains.kotlin.android' version '2.2.0' apply false + id "com.google.gms.google-services" version "4.4.3" apply false } -task clean(type: Delete) { +tasks.register('clean', Delete) { delete rootProject.buildDir } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index e1c4e18b..ebe2551f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -22,4 +22,6 @@ kotlin.code.style=official # thereby reducing the size of the R class for that library android.nonTransitiveRClass=true -android.enableJetifier=true \ No newline at end of file +android.enableJetifier=true +android.defaults.buildfeatures.buildconfig=true +android.nonFinalResIds=false \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ae04661e..d8d44baf 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ +#Sun Jul 27 10:33:58 KST 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-rc-3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle b/settings.gradle index c8fab12d..beb04529 100644 --- a/settings.gradle +++ b/settings.gradle @@ -10,7 +10,6 @@ dependencyResolutionManagement { repositories { google() mavenCentral() - jcenter() maven { url 'https://jitpack.io'} // calendar } } From 93ba3afc57ed474a827281fac65a9185d9a19ca0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A9=E1=84=92=E1=85=B4=E1=84=8B=E1=85=AE?= Date: Sun, 27 Jul 2025 11:05:25 +0900 Subject: [PATCH 2/9] =?UTF-8?q?fix:=20=ED=95=A8=EC=88=98=20=EC=8B=9C?= =?UTF-8?q?=EA=B7=B8=EB=8B=88=EC=B2=98=20=EC=98=A4=EB=A5=98=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../android/youdongknowme/ui/view/keyword/KeywordActivity.kt | 5 ++--- .../ui/view/keyword/OnboardingKeywordActivity.kt | 5 ++--- .../android/youdongknowme/ui/view/setting/SettingFragment.kt | 2 +- .../com/dongyang/android/youdongknowme/ui/view/util/Event.kt | 4 ++-- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/keyword/KeywordActivity.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/keyword/KeywordActivity.kt index 3f52a1c8..41da28b6 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/keyword/KeywordActivity.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/keyword/KeywordActivity.kt @@ -22,9 +22,8 @@ class KeywordActivity : BaseActivity() override fun initDataBinding() { // 효율을 위해 단 한번만 옵저빙하여 이미 구독중인 항목을 선택 처리 viewModel.localKeywordList.observe(this, object : Observer> { - override fun onChanged(t: List?) { - viewModel.setAllKeywords(t?.filter { it.isSubscribe }?.map { it.name } - ?: listOf("")) + override fun onChanged(value: List) { + viewModel.setAllKeywords(value.filter { it.isSubscribe }.map { it.name }) setCheckChipChange( binding.chipGroupKeywordClass, binding.chipGroupKeywordMoney, diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/keyword/OnboardingKeywordActivity.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/keyword/OnboardingKeywordActivity.kt index a32c5b6c..fcbc3b6b 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/keyword/OnboardingKeywordActivity.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/keyword/OnboardingKeywordActivity.kt @@ -28,9 +28,8 @@ class OnboardingKeywordActivity : override fun initDataBinding() { // 효율을 위해 단 한번만 옵저빙하여 이미 구독중인 항목을 선택 처리 viewModel.localKeywordList.observe(this, object : Observer> { - override fun onChanged(t: List?) { - viewModel.setAllKeywords(t?.filter { it.isSubscribe }?.map { it.name } - ?: listOf("")) + override fun onChanged(value: List) { + viewModel.setAllKeywords(value.filter { it.isSubscribe }. map{it.name}) setCheckChipChange( binding.chipGroupOnboardingKeywordClass, binding.chipGroupOnboardingKeywordMoney, diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingFragment.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingFragment.kt index 76688d2e..0870b145 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingFragment.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/setting/SettingFragment.kt @@ -123,7 +123,7 @@ class SettingFragment : BaseFragment() } } - private fun getAppVersion(): String { + private fun getAppVersion(): String? { val packageManager = requireContext().packageManager.getPackageInfo(requireContext().packageName, 0) return packageManager.versionName diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/util/Event.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/util/Event.kt index 3e60c907..c42c7874 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/util/Event.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/util/Event.kt @@ -21,8 +21,8 @@ open class Event(private val content: T) { } class EventObserver(private val onEventUnhandledContent: (T) -> Unit) : Observer> { - override fun onChanged(event: Event?) { - event?.getContentIfNotHandled()?.let { + override fun onChanged(value: Event) { + value.getContentIfNotHandled()?.let { onEventUnhandledContent(it) } } From 5cee25a415bea50fc509d3bc77a172720d38174f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8C=E1=85=A9=E1=84=92=E1=85=B4=E1=84=8B=E1=85=AE?= Date: Fri, 8 Aug 2025 10:39:21 +0900 Subject: [PATCH 3/9] =?UTF-8?q?refactor:=20=EB=9D=BC=EC=9D=B4=EB=B8=8C?= =?UTF-8?q?=EB=9F=AC=EB=A6=AC=20=EB=B2=84=EC=A0=84=20=EC=97=85=EA=B7=B8?= =?UTF-8?q?=EB=A0=88=EC=9D=B4=EB=93=9C=20=EB=B0=8F=20=ED=98=B8=EC=B6=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 11 +++--- .../ui/view/cafeteria/CafeteriaContainer.kt | 6 ++-- .../ui/view/cafeteria/CafeteriaFragment.kt | 34 ++++++++++--------- .../ui/view/cafeteria/CalendarInterface.kt | 2 +- .../main/res/layout/fragment_cafeteria.xml | 7 +--- app/src/main/res/layout/fragment_schedule.xml | 2 -- 6 files changed, 28 insertions(+), 34 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 7797b386..62244f47 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -51,9 +51,8 @@ dependencies { implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.9.2' testImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.ext:junit:1.2.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1' - + androidTestImplementation 'androidx.test.ext:junit:1.3.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.7.0' // preference implementation 'androidx.preference:preference-ktx:1.2.1' @@ -91,7 +90,7 @@ dependencies { implementation 'com.daimajia.androidanimations:library:2.4@aar' // MaterialCalendarView - implementation 'com.github.prolificinteractive:material-calendarview:2.0.0' + implementation 'com.github.prolificinteractive:material-calendarview:2.0.1' implementation 'com.jakewharton.threetenabp:threetenabp:1.4.9' // Glide @@ -116,8 +115,8 @@ dependencies { implementation "com.airbnb.android:lottie:6.6.7" // Navigation - implementation("androidx.navigation:navigation-fragment-ktx:2.9.2") - implementation("androidx.navigation:navigation-ui-ktx:2.9.2") + implementation'androidx.navigation:navigation-fragment-ktx:2.9.3' + implementation'androidx.navigation:navigation-ui-ktx:2.9.3' // MinSdk coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5' diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaContainer.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaContainer.kt index 9f73a5ae..7d6dc2c7 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaContainer.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaContainer.kt @@ -4,9 +4,9 @@ import android.view.View import androidx.core.content.ContextCompat import com.dongyang.android.youdongknowme.R import com.dongyang.android.youdongknowme.databinding.ItemCalendarDayBinding -import com.kizitonwose.calendarview.CalendarView -import com.kizitonwose.calendarview.model.CalendarDay -import com.kizitonwose.calendarview.ui.ViewContainer +import com.kizitonwose.calendar.core.CalendarDay +import com.kizitonwose.calendar.view.CalendarView +import com.kizitonwose.calendar.view.ViewContainer import java.time.LocalDate import java.time.format.DateTimeFormatter diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaFragment.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaFragment.kt index ac125d7a..6eae8fe4 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaFragment.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaFragment.kt @@ -8,15 +8,17 @@ import androidx.core.content.ContextCompat import androidx.core.view.isVisible import androidx.recyclerview.widget.LinearLayoutManager import androidx.window.layout.WindowMetricsCalculator +import com.kizitonwose.calendar.core.CalendarDay import com.dongyang.android.youdongknowme.R import com.dongyang.android.youdongknowme.databinding.FragmentCafeteriaBinding import com.dongyang.android.youdongknowme.standard.base.BaseFragment import com.dongyang.android.youdongknowme.ui.adapter.CafeteriaAnotherAdapter import com.dongyang.android.youdongknowme.ui.adapter.CafeteriaKoreanAdapter import com.dongyang.android.youdongknowme.ui.view.util.EventObserver -import com.kizitonwose.calendarview.model.CalendarDay -import com.kizitonwose.calendarview.ui.DayBinder -import com.kizitonwose.calendarview.utils.Size +import com.kizitonwose.calendar.core.WeekDay +import com.kizitonwose.calendar.view.DaySize +import com.kizitonwose.calendar.view.MonthDayBinder +import com.kizitonwose.calendar.view.WeekDayBinder import org.koin.androidx.viewmodel.ext.android.viewModel import java.time.DayOfWeek.* import java.time.LocalDate @@ -126,22 +128,22 @@ class CafeteriaFragment : BaseFragment { - override fun create(view: View): CafeteriaContainer = - CafeteriaContainer(view, this@apply, viewModel) + daySize = DaySize.Rectangle + + this.dayBinder = object : MonthDayBinder { + override fun create(view: View): CafeteriaContainer { + return CafeteriaContainer(view, this@apply, viewModel) + } override fun bind(container: CafeteriaContainer, day: CalendarDay) { - container.bind(day) + val dayOfWeek = day.date.dayOfWeek + if (dayOfWeek == SATURDAY || dayOfWeek == SUNDAY) { + container.view.visibility = View.GONE + } else { + container.view.visibility = View.VISIBLE + container.bind(day) + } } } } diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CalendarInterface.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CalendarInterface.kt index 88b41b6e..fc275de9 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CalendarInterface.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CalendarInterface.kt @@ -1,6 +1,6 @@ package com.dongyang.android.youdongknowme.ui.view.cafeteria -import com.kizitonwose.calendarview.CalendarView +import com.kizitonwose.calendar.view.CalendarView import java.time.LocalDate interface CalendarInterface { diff --git a/app/src/main/res/layout/fragment_cafeteria.xml b/app/src/main/res/layout/fragment_cafeteria.xml index 34393218..1ad1aded 100644 --- a/app/src/main/res/layout/fragment_cafeteria.xml +++ b/app/src/main/res/layout/fragment_cafeteria.xml @@ -33,18 +33,13 @@ android:layout_marginBottom="20dp" android:orientation="vertical"> - diff --git a/app/src/main/res/layout/fragment_schedule.xml b/app/src/main/res/layout/fragment_schedule.xml index bbb8ddac..f5ac6313 100644 --- a/app/src/main/res/layout/fragment_schedule.xml +++ b/app/src/main/res/layout/fragment_schedule.xml @@ -27,8 +27,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/toolbar_schedule" app:mcv_headerTextAppearance="@style/CalendarHeader" - app:mcv_leftArrowMask="@drawable/ic_arrow_left" - app:mcv_rightArrowMask="@drawable/ic_arrow_right" app:mcv_tileHeight="50dp" app:mcv_tileWidth="0dp" /> From ee973725f56b06a6ccf558cf6833ba21dacda30a Mon Sep 17 00:00:00 2001 From: m6z1 Date: Sun, 10 Aug 2025 00:15:53 +0900 Subject: [PATCH 4/9] =?UTF-8?q?build:=20gradle=20=EB=B0=8F=20android=20?= =?UTF-8?q?=EB=B2=84=EC=A0=84=20=EB=8B=A4=EC=9A=B4=EA=B7=B8=EB=A0=88?= =?UTF-8?q?=EC=9D=B4=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 6 +++--- gradle/wrapper/gradle-wrapper.properties | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 42988cc2..a01cd639 100644 --- a/build.gradle +++ b/build.gradle @@ -1,11 +1,11 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. plugins { - id 'com.android.application' version '8.11.1' apply false - id 'com.android.library' version '8.11.1' apply false + id 'com.android.application' version '8.6.1' apply false + id 'com.android.library' version '8.6.1' apply false id 'org.jetbrains.kotlin.android' version '2.2.0' apply false id "com.google.gms.google-services" version "4.4.3" apply false } tasks.register('clean', Delete) { delete rootProject.buildDir -} \ No newline at end of file +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index d8d44baf..fdb55581 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Sun Jul 27 10:33:58 KST 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-rc-3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 260f8f9d1bbe698bbce155215ebc2602c23529da Mon Sep 17 00:00:00 2001 From: m6z1 Date: Sun, 10 Aug 2025 00:54:44 +0900 Subject: [PATCH 5/9] =?UTF-8?q?refactor:=20fragment=20=EC=A0=84=ED=99=98?= =?UTF-8?q?=20=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Jetpack navigation 라이브러리 제거 후 class 타입 통해 프래그먼트 전환하도록 수정 --- app/build.gradle | 4 - .../ui/view/main/MainActivity.kt | 96 +++++++++++++------ .../ui/view/notice/NoticeFragment.kt | 1 - .../ui/view/util/KeepStateNavigator.kt | 53 ---------- app/src/main/res/layout/activity_main.xml | 4 +- .../main/res/navigation/dmu_navigation.xml | 33 ------- 6 files changed, 70 insertions(+), 121 deletions(-) delete mode 100644 app/src/main/java/com/dongyang/android/youdongknowme/ui/view/util/KeepStateNavigator.kt delete mode 100644 app/src/main/res/navigation/dmu_navigation.xml diff --git a/app/build.gradle b/app/build.gradle index 62244f47..6b744f50 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -114,10 +114,6 @@ dependencies { // Lottie implementation "com.airbnb.android:lottie:6.6.7" - // Navigation - implementation'androidx.navigation:navigation-fragment-ktx:2.9.3' - implementation'androidx.navigation:navigation-ui-ktx:2.9.3' - // MinSdk coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.5' diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt index 921f493e..3d785800 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt @@ -2,46 +2,45 @@ package com.dongyang.android.youdongknowme.ui.view.main import android.content.Context import android.content.Intent -import androidx.navigation.fragment.NavHostFragment -import androidx.navigation.plusAssign -import androidx.navigation.ui.setupWithNavController +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.databinding.DataBindingUtil +import androidx.fragment.app.Fragment +import androidx.fragment.app.commit import com.dongyang.android.youdongknowme.R import com.dongyang.android.youdongknowme.databinding.ActivityMainBinding -import com.dongyang.android.youdongknowme.standard.base.BaseActivity -import com.dongyang.android.youdongknowme.ui.view.util.KeepStateNavigator +import com.dongyang.android.youdongknowme.ui.view.cafeteria.CafeteriaFragment +import com.dongyang.android.youdongknowme.ui.view.notice.NoticeFragment +import com.dongyang.android.youdongknowme.ui.view.schedule.ScheduleFragment +import com.dongyang.android.youdongknowme.ui.view.setting.SettingFragment import com.google.firebase.messaging.FirebaseMessaging import org.koin.androidx.viewmodel.ext.android.viewModel /* 메인 액티비티 */ -class MainActivity : BaseActivity() { - - override val layoutResourceId: Int = R.layout.activity_main - override val viewModel: MainViewModel by viewModel() - - override fun initStartView() { - val navHostFragment = - supportFragmentManager.findFragmentById(R.id.main_nav_container) as NavHostFragment - val navController = navHostFragment.navController - - val navigator = - KeepStateNavigator( - this, - navHostFragment.childFragmentManager, - binding.mainNavContainer.id - ) - navController.navigatorProvider += navigator - navController.setGraph(R.navigation.dmu_navigation) - binding.mainNvBottom.setupWithNavController(navController) +class MainActivity : AppCompatActivity() { + private lateinit var binding: ActivityMainBinding + val viewModel: MainViewModel by viewModel() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = DataBindingUtil.setContentView(this, R.layout.activity_main) + binding.lifecycleOwner = this + setContentView(binding.root) + + initDataBinding() + initBottomNavigation() + if (savedInstanceState == null) { + binding.mainNvBottom.selectedItemId = + R.id.noticeFragment + } } - override fun initDataBinding() { + private fun initDataBinding() { viewModel.isFirstLaunch.observe(this) { boolean -> if (boolean) getFcmToken() } } - override fun initAfterBinding() = Unit - private fun getFcmToken() { viewModel.setIsFirstLaunch(false) FirebaseMessaging.getInstance().token.addOnCompleteListener { task -> @@ -53,6 +52,49 @@ class MainActivity : BaseActivity() { } } + private fun initBottomNavigation() { + binding.mainNvBottom.setOnItemSelectedListener { item -> + return@setOnItemSelectedListener when (item.itemId) { + R.id.noticeFragment -> { + replaceFragment() + true + } + + R.id.scheduleFragment -> { + replaceFragment() + true + } + + R.id.cafeteriaFragment -> { + replaceFragment() + true + } + + R.id.settingFragment -> { + replaceFragment() + true + } + + else -> false + } + } + } + + private inline fun replaceFragment() { + val tag: String = T::class.java.name + val fragment = + supportFragmentManager.findFragmentByTag(tag) as? T ?: T::class.java.newInstance() + supportFragmentManager.commit { + setReorderingAllowed(true) + supportFragmentManager.fragments.forEach { hide(it) } + if (fragment.isAdded) { + show(fragment) + } else { + add(binding.mainNavContainer.id, fragment, tag) + } + } + } + companion object { fun createIntent(context: Context): Intent { diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/notice/NoticeFragment.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/notice/NoticeFragment.kt index 59409277..5e3311ba 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/notice/NoticeFragment.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/notice/NoticeFragment.kt @@ -1,7 +1,6 @@ package com.dongyang.android.youdongknowme.ui.view.notice import android.content.Intent -import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.dongyang.android.youdongknowme.R diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/util/KeepStateNavigator.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/util/KeepStateNavigator.kt deleted file mode 100644 index c9ff8f4f..00000000 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/util/KeepStateNavigator.kt +++ /dev/null @@ -1,53 +0,0 @@ -package com.dongyang.android.youdongknowme.ui.view.util - -import android.content.Context -import android.os.Bundle -import androidx.fragment.app.FragmentManager -import androidx.navigation.NavDestination -import androidx.navigation.NavOptions -import androidx.navigation.Navigator -import androidx.navigation.fragment.FragmentNavigator - -@Navigator.Name("keep_state_fragment") -class KeepStateNavigator( - private val context: Context, - private val manager: FragmentManager, - private val containerId: Int -) : FragmentNavigator(context, manager, containerId) { - - override fun createDestination(): Destination = Destination(this) - override fun navigate( - destination: Destination, - args: Bundle?, - navOptions: NavOptions?, - navigatorExtras: Navigator.Extras? - ): NavDestination? { - - val tag = destination.id.toString() - val transaction = manager.beginTransaction() - var initialNavigate = false - val currentFragment = manager.primaryNavigationFragment - - if (currentFragment != null) { - transaction.hide(currentFragment) - } else { - initialNavigate = true - } - - var fragment = manager.findFragmentByTag(tag) - - if (fragment == null) { - val className = destination.className - fragment = manager.fragmentFactory.instantiate(context.classLoader, className) - transaction.add(containerId, fragment, tag) - } else { - transaction.show(fragment) - } - - transaction.setPrimaryNavigationFragment(fragment) - transaction.setReorderingAllowed(true) - transaction.commitNow() - - return if (initialNavigate) destination else null - } -} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index a7bd417b..db4e79a7 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -10,10 +10,8 @@ - \ No newline at end of file + diff --git a/app/src/main/res/navigation/dmu_navigation.xml b/app/src/main/res/navigation/dmu_navigation.xml deleted file mode 100644 index fccaaa9f..00000000 --- a/app/src/main/res/navigation/dmu_navigation.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - From b377f768066b779d5be2ac738b81369e7954bdab Mon Sep 17 00:00:00 2001 From: m6z1 Date: Sun, 10 Aug 2025 01:23:35 +0900 Subject: [PATCH 6/9] =?UTF-8?q?fix:=20=EC=8B=9D=EB=8B=A8=20=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=EC=97=90=EB=9F=AC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 6 +-- .../ui/view/cafeteria/CafeteriaContainer.kt | 8 +-- .../ui/view/cafeteria/CafeteriaFragment.kt | 51 +++++++++++-------- .../ui/view/cafeteria/CalendarInterface.kt | 4 +- .../main/res/layout/fragment_cafeteria.xml | 7 ++- 5 files changed, 44 insertions(+), 32 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 6b744f50..f006fead 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -90,8 +90,8 @@ dependencies { implementation 'com.daimajia.androidanimations:library:2.4@aar' // MaterialCalendarView - implementation 'com.github.prolificinteractive:material-calendarview:2.0.1' - implementation 'com.jakewharton.threetenabp:threetenabp:1.4.9' + implementation 'com.github.prolificinteractive:material-calendarview:2.0.0' + implementation 'com.jakewharton.threetenabp:threetenabp:1.2.0' // Glide implementation 'com.github.bumptech.glide:glide:4.16.0' @@ -106,7 +106,7 @@ dependencies { implementation 'com.jakewharton.timber:timber:5.0.1' // Horizontal CalendarView - implementation 'com.github.kizitonwose:CalendarView:2.4.1' + implementation 'com.github.kizitonwose:CalendarView:1.0.4' // Flexbox implementation 'com.google.android.flexbox:flexbox:3.0.0' diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaContainer.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaContainer.kt index 7d6dc2c7..373f834b 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaContainer.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaContainer.kt @@ -4,9 +4,9 @@ import android.view.View import androidx.core.content.ContextCompat import com.dongyang.android.youdongknowme.R import com.dongyang.android.youdongknowme.databinding.ItemCalendarDayBinding -import com.kizitonwose.calendar.core.CalendarDay -import com.kizitonwose.calendar.view.CalendarView -import com.kizitonwose.calendar.view.ViewContainer +import com.kizitonwose.calendarview.CalendarView +import com.kizitonwose.calendarview.model.CalendarDay +import com.kizitonwose.calendarview.ui.ViewContainer import java.time.LocalDate import java.time.format.DateTimeFormatter @@ -65,4 +65,4 @@ class CafeteriaContainer( tvItemCalendarMonth.setTextColor(color) } } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaFragment.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaFragment.kt index 6eae8fe4..b4fa982c 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaFragment.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/cafeteria/CafeteriaFragment.kt @@ -8,19 +8,19 @@ import androidx.core.content.ContextCompat import androidx.core.view.isVisible import androidx.recyclerview.widget.LinearLayoutManager import androidx.window.layout.WindowMetricsCalculator -import com.kizitonwose.calendar.core.CalendarDay import com.dongyang.android.youdongknowme.R import com.dongyang.android.youdongknowme.databinding.FragmentCafeteriaBinding import com.dongyang.android.youdongknowme.standard.base.BaseFragment import com.dongyang.android.youdongknowme.ui.adapter.CafeteriaAnotherAdapter import com.dongyang.android.youdongknowme.ui.adapter.CafeteriaKoreanAdapter import com.dongyang.android.youdongknowme.ui.view.util.EventObserver -import com.kizitonwose.calendar.core.WeekDay -import com.kizitonwose.calendar.view.DaySize -import com.kizitonwose.calendar.view.MonthDayBinder -import com.kizitonwose.calendar.view.WeekDayBinder +import com.kizitonwose.calendarview.model.CalendarDay +import com.kizitonwose.calendarview.ui.DayBinder +import com.kizitonwose.calendarview.utils.Size import org.koin.androidx.viewmodel.ext.android.viewModel -import java.time.DayOfWeek.* +import java.time.DayOfWeek.MONDAY +import java.time.DayOfWeek.SATURDAY +import java.time.DayOfWeek.SUNDAY import java.time.LocalDate import java.time.YearMonth import java.time.temporal.TemporalAdjusters @@ -66,7 +66,11 @@ class CafeteriaFragment : BaseFragment updateCafeteriaState(selectedCategory) } + viewModel.selectedCategory.value?.let { selectedCategory -> + updateCafeteriaState( + selectedCategory + ) + } } } @@ -128,22 +132,23 @@ class CafeteriaFragment : BaseFragment { - override fun create(view: View): CafeteriaContainer { - return CafeteriaContainer(view, this@apply, viewModel) - } + binding.cvCafeteriaCalendar.apply { + daySize = Size(dayWidth, dayHeight) + dayBinder = object : DayBinder { + override fun create(view: View): CafeteriaContainer = + CafeteriaContainer(view, this@apply, viewModel) override fun bind(container: CafeteriaContainer, day: CalendarDay) { - val dayOfWeek = day.date.dayOfWeek - if (dayOfWeek == SATURDAY || dayOfWeek == SUNDAY) { - container.view.visibility = View.GONE - } else { - container.view.visibility = View.VISIBLE - container.bind(day) - } + container.bind(day) } } } @@ -157,8 +162,10 @@ class CafeteriaFragment : BaseFragment - From 9b72a61994ee4147a06d4c3bcbae187c20354473 Mon Sep 17 00:00:00 2001 From: m6z1 Date: Sun, 10 Aug 2025 01:32:25 +0900 Subject: [PATCH 7/9] =?UTF-8?q?build:=20firebase=20=EB=9D=BC=EC=9D=B4?= =?UTF-8?q?=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EB=B2=84=EC=A0=84=20=EC=97=85?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index f006fead..777e137f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -98,7 +98,7 @@ dependencies { annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0' // Firebase - implementation platform('com.google.firebase:firebase-bom:34.0.0') + implementation platform('com.google.firebase:firebase-bom:34.1.0') implementation 'com.google.firebase:firebase-analytics' implementation 'com.google.firebase:firebase-messaging:25.0.0' From d8064e7a3b586a65c6cd7b463123dc7978da76a3 Mon Sep 17 00:00:00 2001 From: m6z1 Date: Sun, 10 Aug 2025 01:32:44 +0900 Subject: [PATCH 8/9] =?UTF-8?q?feat:=20=ED=86=A0=ED=81=B0=20=EB=B0=9C?= =?UTF-8?q?=EA=B8=89=20=EC=8B=A4=ED=8C=A8=20=EC=8B=9C=20=EB=A1=9C=EA=B9=85?= =?UTF-8?q?=20=EC=8B=AC=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../android/youdongknowme/ui/view/main/MainActivity.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt index 3d785800..06b5722e 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt @@ -15,6 +15,7 @@ import com.dongyang.android.youdongknowme.ui.view.schedule.ScheduleFragment import com.dongyang.android.youdongknowme.ui.view.setting.SettingFragment import com.google.firebase.messaging.FirebaseMessaging import org.koin.androidx.viewmodel.ext.android.viewModel +import timber.log.Timber /* 메인 액티비티 */ class MainActivity : AppCompatActivity() { @@ -44,10 +45,11 @@ class MainActivity : AppCompatActivity() { private fun getFcmToken() { viewModel.setIsFirstLaunch(false) FirebaseMessaging.getInstance().token.addOnCompleteListener { task -> - val token = task.result - if (task.isSuccessful) { + val token = task.result viewModel.setFCMToken(token).run { viewModel.setInitToken() } + } else { + Timber.e("토큰 재발급 실패 : ${task.exception}") } } } From 20d6ba6d9c527a93c0ecd57fdda1b31da597fe33 Mon Sep 17 00:00:00 2001 From: m6z1 Date: Sun, 10 Aug 2025 18:36:25 +0900 Subject: [PATCH 9/9] =?UTF-8?q?feat:=20edgeToEdge=20=EB=8C=80=EC=9D=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 + .../standard/base/BaseActivity.kt | 20 ++++++++++++++++--- .../ui/view/main/MainActivity.kt | 17 ++++++++++++++++ app/src/main/res/layout/activity_main.xml | 15 ++++++-------- 4 files changed, 41 insertions(+), 12 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 777e137f..ccc71abb 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -50,6 +50,7 @@ dependencies { implementation 'androidx.constraintlayout:constraintlayout:2.2.1' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.9.2' + implementation("androidx.activity:activity-ktx:1.10.1") testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.3.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.7.0' diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/standard/base/BaseActivity.kt b/app/src/main/java/com/dongyang/android/youdongknowme/standard/base/BaseActivity.kt index 89524e16..8904921e 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/standard/base/BaseActivity.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/standard/base/BaseActivity.kt @@ -1,12 +1,15 @@ package com.dongyang.android.youdongknowme.standard.base -import android.content.Context import android.os.Bundle import android.text.Spannable import android.text.SpannableStringBuilder import android.text.style.ForegroundColorSpan import android.widget.TextView +import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.updatePadding import androidx.databinding.DataBindingUtil import androidx.databinding.ViewDataBinding import com.dongyang.android.youdongknowme.ui.view.LoadingDialog @@ -24,10 +27,21 @@ abstract class BaseActivity : AppCompatA override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + enableEdgeToEdge() binding = DataBindingUtil.setContentView(this, layoutResourceId) binding.lifecycleOwner = this setContentView(binding.root) + ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, insets -> + val inset = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.updatePadding( + top = inset.top, + bottom = inset.bottom, + left = inset.left, + right = inset.right, + ) + insets + } initStartView() initDataBinding() initAfterBinding() @@ -36,7 +50,7 @@ abstract class BaseActivity : AppCompatA protected fun setSpanText( spanTextView: TextView, startIdx: Int, - endIdx: Int + endIdx: Int, ) { SpannableStringBuilder(spanTextView.text).apply { setSpan( @@ -90,4 +104,4 @@ abstract class BaseActivity : AppCompatA abstract fun initAfterBinding() -} \ No newline at end of file +} diff --git a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt index 06b5722e..6ec920f3 100644 --- a/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt +++ b/app/src/main/java/com/dongyang/android/youdongknowme/ui/view/main/MainActivity.kt @@ -3,7 +3,12 @@ package com.dongyang.android.youdongknowme.ui.view.main import android.content.Context import android.content.Intent import android.os.Bundle +import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.ViewCompat +import androidx.core.view.WindowCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.updatePadding import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.fragment.app.commit @@ -24,9 +29,21 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + enableEdgeToEdge() binding = DataBindingUtil.setContentView(this, R.layout.activity_main) binding.lifecycleOwner = this setContentView(binding.root) + WindowCompat.setDecorFitsSystemWindows(window, false) + ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, insets -> + val inset = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.updatePadding( + top = inset.top, + bottom = inset.bottom, + left = inset.left, + right = inset.right, + ) + insets + } initDataBinding() initBottomNavigation() diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index db4e79a7..a2f9d5c5 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -19,19 +19,16 @@ - - + app:menu="@menu/menu_main" /> -