From edeb91405d3e83ecabeff102738287791ad3c9ed Mon Sep 17 00:00:00 2001 From: Gyeongrok Kim Date: Sun, 7 Jan 2024 17:46:32 +0900 Subject: [PATCH 1/7] fix: add missing sign in button in SettingScreen --- .../presentation/setting/SettingScreen.kt | 16 +++++++++++++++- app/src/main/res/values/strings.xml | 1 + 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/dev/briefing/presentation/setting/SettingScreen.kt b/app/src/main/java/com/dev/briefing/presentation/setting/SettingScreen.kt index 4f48daa..b861476 100644 --- a/app/src/main/java/com/dev/briefing/presentation/setting/SettingScreen.kt +++ b/app/src/main/java/com/dev/briefing/presentation/setting/SettingScreen.kt @@ -225,9 +225,10 @@ fun SettingScreen( } ) + SettingSection(R.string.setting_section_auth) + if (authPreferenceHelper.getMemberId() != -1) { //로그 아웃 및 회원 탈퇴 - SettingSection(R.string.setting_section_auth) SettingMenuItem( type = SettingMenu( isArrow = true, @@ -249,6 +250,19 @@ fun SettingScreen( openExitDialog.value = true } ) + } else { + SettingMenuItem( + type = SettingMenu( + isArrow = true, + ), + title = R.string.setting_login, + onClick = { + val intent = Intent(context, SignInActivity::class.java) + startActivity(context, intent, null) + val activity = context as? Activity + activity?.finish() + } + ) } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 47596c2..3b52906 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -13,6 +13,7 @@ 유의 사항 로그 아웃 회원 탈퇴 + 로그인 관련 기사 your_channel_id Your Channel Name From 062059c77b3fef63621851f141f8162cd560d13a Mon Sep 17 00:00:00 2001 From: Gyeongrok Kim Date: Sun, 7 Jan 2024 18:30:16 +0900 Subject: [PATCH 2/7] fix: incorrect saving daily alert time in SettingScreen Add missing apply() in DailyAlert sharedpref --- .../briefing/util/preference/DailyAlertTimePreferenceHelper.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/dev/briefing/util/preference/DailyAlertTimePreferenceHelper.kt b/app/src/main/java/com/dev/briefing/util/preference/DailyAlertTimePreferenceHelper.kt index 1a1a23d..746957b 100644 --- a/app/src/main/java/com/dev/briefing/util/preference/DailyAlertTimePreferenceHelper.kt +++ b/app/src/main/java/com/dev/briefing/util/preference/DailyAlertTimePreferenceHelper.kt @@ -25,6 +25,7 @@ class DailyAlertTimePreferenceHelper(val context: Context) { fun saveAlarmTime(items: AlarmTime) { val json = Gson().toJson(items) editor.putString(KEY_DAILY_ALARM_TIME, json) + editor.apply() } companion object { From 49761a344d7419884ad7ac06b7f387dcbef13847 Mon Sep 17 00:00:00 2001 From: Gyeongrok Kim Date: Sun, 7 Jan 2024 21:59:40 +0900 Subject: [PATCH 3/7] feat: Add advertise banner in HomeScreen and ArticleDetailScreen --- app/build.gradle | 14 ++++--- app/src/main/AndroidManifest.xml | 4 ++ .../briefing/presentation/ad/AdmobBanner.kt | 24 +++++++++++ .../detail/ArticleDetailScreen.kt | 3 ++ .../briefing/presentation/home/HomeScreen.kt | 42 +++++++++++-------- 5 files changed, 64 insertions(+), 23 deletions(-) create mode 100644 app/src/main/java/com/dev/briefing/presentation/ad/AdmobBanner.kt diff --git a/app/build.gradle b/app/build.gradle index 7b3f4c9..2721d72 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,13 +24,15 @@ android { Properties properties = new Properties() properties.load(project.rootProject.file("local.properties").newDataInputStream()) buildConfigField "String", "BASE_URL", "\"${properties.getProperty("BASE_URL")}\"" -// buildConfigField "String", "DEV_BASE_URL", "\"${properties.getProperty("DEV_BASE_URL")}\"" buildConfigField "String", "WEB_URL", "\"${properties.getProperty("WEB_URL")}\"" buildConfigField "String", "NOTIFICATION_CHANNEL_ID", "\"NOTIFICATION_CHANNEL_ID\"" buildConfigField "String", "GOOGLE_CLIENT_ID", "\"${properties.getProperty("GOOGLE_CLIENT_ID")}\"" + buildConfigField "String", "ADMOB_APP_ID", "\"${properties.getProperty("ADMOB_APP_ID")}\"" + buildConfigField "String", "ADMOB_BANNER_ID", "\"${properties.getProperty("ADMOB_BANNER_ID")}\"" + manifestPlaceholders = [admobAppId: "${properties.getProperty('ADMOB_APP_ID')}"] } - signingConfigs{ - config{ + signingConfigs { + config { keyAlias keyProperties['keyAlias'] keyPassword keyProperties['keyAlias'] storeFile file(keyProperties['storeFile']) @@ -67,7 +69,6 @@ android { } dependencies { - implementation 'androidx.core:core-ktx:1.8.0' implementation platform('org.jetbrains.kotlin:kotlin-bom:1.8.0') implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.6.2' @@ -83,7 +84,7 @@ dependencies { implementation 'androidx.compose.material3:material3-android:1.2.0-alpha12' - implementation ("androidx.constraintlayout:constraintlayout-compose:1.0.1") + implementation("androidx.constraintlayout:constraintlayout-compose:1.0.1") implementation 'androidx.compose.ui:ui-tooling-android:1.5.4' //Test Library testImplementation 'junit:junit:4.13.2' @@ -134,4 +135,7 @@ dependencies { implementation("androidx.credentials:credentials:1.2.0") implementation("androidx.credentials:credentials-play-services-auth:1.2.0") + + // Google Admob + implementation 'com.google.android.gms:play-services-ads:22.6.0' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a49721c..5413778 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -51,6 +51,10 @@ + + \ No newline at end of file diff --git a/app/src/main/java/com/dev/briefing/presentation/ad/AdmobBanner.kt b/app/src/main/java/com/dev/briefing/presentation/ad/AdmobBanner.kt new file mode 100644 index 0000000..9f15f50 --- /dev/null +++ b/app/src/main/java/com/dev/briefing/presentation/ad/AdmobBanner.kt @@ -0,0 +1,24 @@ +package com.dev.briefing.presentation.ad + +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.viewinterop.AndroidView +import com.dev.briefing.BuildConfig +import com.google.android.gms.ads.AdRequest +import com.google.android.gms.ads.AdSize +import com.google.android.gms.ads.AdView + +@Composable +fun AdmobBanner(modifier: Modifier = Modifier) { + AndroidView( + modifier = Modifier.fillMaxWidth(), + factory = { context -> + AdView(context).apply { + setAdSize(AdSize.BANNER) + adUnitId = BuildConfig.ADMOB_BANNER_ID + loadAd(AdRequest.Builder().build()) + } + } + ) +} diff --git a/app/src/main/java/com/dev/briefing/presentation/detail/ArticleDetailScreen.kt b/app/src/main/java/com/dev/briefing/presentation/detail/ArticleDetailScreen.kt index 5ee08d0..e1aee6e 100644 --- a/app/src/main/java/com/dev/briefing/presentation/detail/ArticleDetailScreen.kt +++ b/app/src/main/java/com/dev/briefing/presentation/detail/ArticleDetailScreen.kt @@ -28,6 +28,7 @@ import androidx.navigation.NavController import androidx.navigation.compose.rememberNavController import com.dev.briefing.R import com.dev.briefing.model.RelatedArticle +import com.dev.briefing.presentation.ad.AdmobBanner import com.dev.briefing.presentation.login.SignInActivity import com.dev.briefing.presentation.theme.BriefingTheme import com.dev.briefing.presentation.theme.utils.CommonDialog @@ -89,6 +90,7 @@ fun ArticleDetailScreen( Column( modifier = Modifier .fillMaxSize() + .weight(1f) .verticalScroll(rememberScrollState()) ) { val article = uiState.article @@ -140,6 +142,7 @@ fun ArticleDetailScreen( RelatedArticles(Modifier.padding(32.dp, 16.dp), article.relatedArticles) } + AdmobBanner(Modifier.fillMaxWidth()) } } } diff --git a/app/src/main/java/com/dev/briefing/presentation/home/HomeScreen.kt b/app/src/main/java/com/dev/briefing/presentation/home/HomeScreen.kt index 7a32dd4..32339b3 100644 --- a/app/src/main/java/com/dev/briefing/presentation/home/HomeScreen.kt +++ b/app/src/main/java/com/dev/briefing/presentation/home/HomeScreen.kt @@ -40,6 +40,7 @@ import androidx.navigation.compose.rememberNavController import com.dev.briefing.R import com.dev.briefing.model.BriefingCompactArticle import com.dev.briefing.navigation.HomeScreen +import com.dev.briefing.presentation.ad.AdmobBanner import com.dev.briefing.presentation.common.BriefingTabRow import com.dev.briefing.presentation.home.HomeCategory import com.dev.briefing.presentation.home.HomeViewModel @@ -202,25 +203,30 @@ fun HomeScreenArticleList( } } - Box( - modifier = Modifier - .fillMaxSize() - .nestedScroll(pullRefreshState.nestedScrollConnection) - ) { - CategoryArticleList( - createdAt = updatedAt?.let { formatBriefingDate(it) } ?: "", - articles = articles, - onArticleSelect = onArticleSelect, - onRefresh = { - onRefreshRequest.invoke() - }) - - PullToRefreshContainer( + Column(Modifier.fillMaxSize(), verticalArrangement = Arrangement.Bottom) { + Box( modifier = Modifier - .align(Alignment.TopCenter) - .graphicsLayer(scaleX = scaleFraction, scaleY = scaleFraction), - state = pullRefreshState - ) + .fillMaxSize() + .weight(1f) + .nestedScroll(pullRefreshState.nestedScrollConnection) + ) { + CategoryArticleList( + createdAt = updatedAt?.let { formatBriefingDate(it) } ?: "", + articles = articles, + onArticleSelect = onArticleSelect, + onRefresh = { + onRefreshRequest.invoke() + }) + + PullToRefreshContainer( + modifier = Modifier + .align(Alignment.TopCenter) + .graphicsLayer(scaleX = scaleFraction, scaleY = scaleFraction), + state = pullRefreshState + ) + } + + AdmobBanner(Modifier.fillMaxWidth()) } } From 8fe7d1fb7a00a6229c2be9b96f2328775ea1ac96 Mon Sep 17 00:00:00 2001 From: Gyeongrok Kim Date: Mon, 8 Jan 2024 04:00:31 +0900 Subject: [PATCH 4/7] feat: Add admob test device id --- app/src/main/java/com/dev/briefing/util/MainApplication.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/src/main/java/com/dev/briefing/util/MainApplication.kt b/app/src/main/java/com/dev/briefing/util/MainApplication.kt index 02dc0b9..920ec70 100644 --- a/app/src/main/java/com/dev/briefing/util/MainApplication.kt +++ b/app/src/main/java/com/dev/briefing/util/MainApplication.kt @@ -9,6 +9,7 @@ import com.dev.briefing.di.networkModule import com.dev.briefing.di.preferenceModule import com.dev.briefing.di.repositoryModule import com.dev.briefing.di.viewModelModule +import com.google.android.gms.ads.RequestConfiguration import com.orhanobut.logger.AndroidLogAdapter import com.orhanobut.logger.Logger import org.koin.android.ext.koin.androidContext @@ -25,6 +26,8 @@ class MainApplication : Application() { } }) + RequestConfiguration.Builder().setTestDeviceIds(listOf(BuildConfig.ADMOB_TEST_DEVICE_1)) + startKoin { androidContext(this@MainApplication) modules( From f8a2cfe9cf318b214c9158165141c233b561c160 Mon Sep 17 00:00:00 2001 From: Gyeongrok Kim Date: Mon, 8 Jan 2024 04:01:52 +0900 Subject: [PATCH 5/7] dependency: Add crashlytics --- app/build.gradle | 4 ++++ build.gradle | 1 + 2 files changed, 5 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index 2721d72..7842845 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,6 +2,7 @@ plugins { id 'com.android.application' id 'org.jetbrains.kotlin.android' id 'com.google.gms.google-services' + id 'com.google.firebase.crashlytics' } android { @@ -29,6 +30,7 @@ android { buildConfigField "String", "GOOGLE_CLIENT_ID", "\"${properties.getProperty("GOOGLE_CLIENT_ID")}\"" buildConfigField "String", "ADMOB_APP_ID", "\"${properties.getProperty("ADMOB_APP_ID")}\"" buildConfigField "String", "ADMOB_BANNER_ID", "\"${properties.getProperty("ADMOB_BANNER_ID")}\"" + buildConfigField "String", "ADMOB_TEST_DEVICE_1", "\"${properties.getProperty("ADMOB_TEST_DEVICE_1")}\"" manifestPlaceholders = [admobAppId: "${properties.getProperty('ADMOB_APP_ID')}"] } signingConfigs { @@ -126,6 +128,8 @@ dependencies { //analytics implementation platform("com.google.firebase:firebase-bom:32.5.0") implementation "com.google.firebase:firebase-analytics" + //crashlytics + implementation("com.google.firebase:firebase-crashlytics") implementation "androidx.work:work-runtime-ktx:$work_version" diff --git a/build.gradle b/build.gradle index 5cb0ba6..6864d5f 100644 --- a/build.gradle +++ b/build.gradle @@ -18,4 +18,5 @@ plugins { id 'com.android.library' version '8.0.2' apply false id 'org.jetbrains.kotlin.android' version '1.8.10' apply false id 'com.google.gms.google-services' version '4.4.0' apply false + id 'com.google.firebase.crashlytics' version '2.9.9' apply false } \ No newline at end of file From 6a101f990236692949ed166aaa54ff28b9d4a6fd Mon Sep 17 00:00:00 2001 From: Gyeongrok Kim Date: Mon, 8 Jan 2024 04:03:32 +0900 Subject: [PATCH 6/7] ui: Replace direct padding with spacers in SettingScreen --- .../com/dev/briefing/presentation/setting/SettingScreen.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/dev/briefing/presentation/setting/SettingScreen.kt b/app/src/main/java/com/dev/briefing/presentation/setting/SettingScreen.kt index b861476..622e3f0 100644 --- a/app/src/main/java/com/dev/briefing/presentation/setting/SettingScreen.kt +++ b/app/src/main/java/com/dev/briefing/presentation/setting/SettingScreen.kt @@ -113,8 +113,7 @@ fun SettingScreen( modifier = modifier .fillMaxWidth() .fillMaxHeight() - .background(color = BriefingTheme.color.BackgrundGray) - .padding(bottom = 40.dp), + .background(color = BriefingTheme.color.BackgrundGray), horizontalAlignment = Alignment.Start, ) { item { @@ -264,6 +263,8 @@ fun SettingScreen( } ) } + + Spacer(modifier = Modifier.height(40.dp)) } } } From 62a43804bc3d8fae185e7b23660b2f20863fdd38 Mon Sep 17 00:00:00 2001 From: Gyeongrok Kim Date: Mon, 8 Jan 2024 04:04:45 +0900 Subject: [PATCH 7/7] release: Update version to 2.0.1 --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 7842845..b11d16b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -15,8 +15,8 @@ android { applicationId "com.dev.briefing" minSdk 28 targetSdk 34 - versionCode 4 - versionName "2.0.0" + versionCode 5 + versionName "2.0.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables {