From 66aec383d88003b50e0931188b1649108b5ceca8 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Thu, 25 Nov 2021 08:54:26 +0100 Subject: [PATCH 01/23] [#234] updating issue template (#235) --- docs/ISSUE_TEMPLATE.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/ISSUE_TEMPLATE.md b/docs/ISSUE_TEMPLATE.md index db26ee6e59..67dbee61dc 100644 --- a/docs/ISSUE_TEMPLATE.md +++ b/docs/ISSUE_TEMPLATE.md @@ -1,5 +1,7 @@ ## Description -### Issue Checklist - -* [ ] I have added a valid description. + From a78dd734922afff5c1ea9db5e19c6b54c0633c3a Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Thu, 25 Nov 2021 19:11:40 +0100 Subject: [PATCH 02/23] [#222] add StrictMode (#236) --- .../ccc/android/app/CCCApplication.kt | 23 +++++++++++++++++++ buildSrc/src/main/kotlin/Build.kt | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/github/mustafaozhan/ccc/android/app/CCCApplication.kt b/android/src/main/java/com/github/mustafaozhan/ccc/android/app/CCCApplication.kt index 8b37767d50..9bd21f9f32 100755 --- a/android/src/main/java/com/github/mustafaozhan/ccc/android/app/CCCApplication.kt +++ b/android/src/main/java/com/github/mustafaozhan/ccc/android/app/CCCApplication.kt @@ -5,12 +5,16 @@ package com.github.mustafaozhan.ccc.android.app import android.app.Application import android.os.Build +import android.os.StrictMode +import android.os.StrictMode.ThreadPolicy +import android.os.StrictMode.VmPolicy import co.touchlab.kermit.Logger import com.github.mustafaozhan.ad.initAds import com.github.mustafaozhan.ccc.android.di.platformModule import com.github.mustafaozhan.ccc.client.di.initAndroid import com.github.mustafaozhan.logmob.initCrashlytics import com.github.mustafaozhan.logmob.initLogger +import mustafaozhan.github.com.mycurrencies.BuildConfig @Suppress("unused") class CCCApplication : Application() { @@ -18,6 +22,10 @@ class CCCApplication : Application() { override fun onCreate() { super.onCreate() + if (BuildConfig.DEBUG) { + enableStrictMode() + } + initLogger().let { it.i { "Logger initialized" } } @@ -37,4 +45,19 @@ class CCCApplication : Application() { platformModule = platformModule ) } + + private fun enableStrictMode() { + StrictMode.setThreadPolicy( + ThreadPolicy.Builder() + .detectAll() + .penaltyLog() + .build() + ) + StrictMode.setVmPolicy( + VmPolicy.Builder() + .detectAll() + .penaltyLog() + .build() + ) + } } diff --git a/buildSrc/src/main/kotlin/Build.kt b/buildSrc/src/main/kotlin/Build.kt index 01728d6dbd..275f26ce86 100644 --- a/buildSrc/src/main/kotlin/Build.kt +++ b/buildSrc/src/main/kotlin/Build.kt @@ -18,4 +18,4 @@ object Build { const val huaweiApi = "huaweiApi" } } -} \ No newline at end of file +} From 46fe6ad5c7240c457285e8f660b8fab05033c261 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Fri, 26 Nov 2021 00:10:53 +0100 Subject: [PATCH 03/23] [#231] Creating Analytics module (#238) --- analytics/.gitignore | 1 + analytics/build.gradle.kts | 23 +++++++++++++++++++ analytics/src/main/AndroidManifest.xml | 8 +++++++ .../github/analytics/Analytics.kt | 8 +++++++ android/build.gradle.kts | 1 + .../ccc/android/app/CCCApplication.kt | 7 ++++-- buildSrc/src/main/kotlin/Dependencies.kt | 6 +++-- buildSrc/src/main/kotlin/Versions.kt | 2 +- logmob | 2 +- settings.gradle.kts | 14 +++++++---- 10 files changed, 62 insertions(+), 10 deletions(-) create mode 100644 analytics/.gitignore create mode 100644 analytics/build.gradle.kts create mode 100644 analytics/src/main/AndroidManifest.xml create mode 100644 analytics/src/main/java/com/mustafaozhan/github/analytics/Analytics.kt diff --git a/analytics/.gitignore b/analytics/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/analytics/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/analytics/build.gradle.kts b/analytics/build.gradle.kts new file mode 100644 index 0000000000..46726342c1 --- /dev/null +++ b/analytics/build.gradle.kts @@ -0,0 +1,23 @@ +plugins { + with(Dependencies.Plugins) { + id(ANDROID_LIB) + kotlin(ANDROID) + } +} + +android { + with(ProjectSettings) { + compileSdk = COMPILE_SDK_VERSION + + defaultConfig { + minSdk = MIN_SDK_VERSION + targetSdk = TARGET_SDK_VERSION + } + } +} + +dependencies { + with(Dependencies.Android) { + implementation(FIREBASE_ANALYTICS) + } +} diff --git a/analytics/src/main/AndroidManifest.xml b/analytics/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..b318a346a2 --- /dev/null +++ b/analytics/src/main/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/analytics/src/main/java/com/mustafaozhan/github/analytics/Analytics.kt b/analytics/src/main/java/com/mustafaozhan/github/analytics/Analytics.kt new file mode 100644 index 0000000000..358cec1347 --- /dev/null +++ b/analytics/src/main/java/com/mustafaozhan/github/analytics/Analytics.kt @@ -0,0 +1,8 @@ +package com.mustafaozhan.github.analytics + +import android.content.Context +import com.google.firebase.analytics.FirebaseAnalytics + +fun initAnalytics(context: Context) { + FirebaseAnalytics.getInstance(context) +} diff --git a/android/build.gradle.kts b/android/build.gradle.kts index 8db1765c6f..17a4dd84e0 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -169,5 +169,6 @@ dependencies { implementation(project(BILLING)) implementation(project(AD)) + implementation(project(ANALYTICS)) } } diff --git a/android/src/main/java/com/github/mustafaozhan/ccc/android/app/CCCApplication.kt b/android/src/main/java/com/github/mustafaozhan/ccc/android/app/CCCApplication.kt index 9bd21f9f32..56f2301e73 100755 --- a/android/src/main/java/com/github/mustafaozhan/ccc/android/app/CCCApplication.kt +++ b/android/src/main/java/com/github/mustafaozhan/ccc/android/app/CCCApplication.kt @@ -14,6 +14,7 @@ import com.github.mustafaozhan.ccc.android.di.platformModule import com.github.mustafaozhan.ccc.client.di.initAndroid import com.github.mustafaozhan.logmob.initCrashlytics import com.github.mustafaozhan.logmob.initLogger +import com.mustafaozhan.github.analytics.initAnalytics import mustafaozhan.github.com.mycurrencies.BuildConfig @Suppress("unused") @@ -32,9 +33,11 @@ class CCCApplication : Application() { Logger.i { "CCCApplication onCreate" } + if (!BuildConfig.DEBUG) { + initAnalytics(this) + } + initCrashlytics( - context = this, - enableAnalytics = true, enableAnrWatchDog = Build.VERSION.SDK_INT < Build.VERSION_CODES.R ) diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt index 6bafc86aaa..f6b2a89641 100644 --- a/buildSrc/src/main/kotlin/Dependencies.kt +++ b/buildSrc/src/main/kotlin/Dependencies.kt @@ -30,8 +30,9 @@ object Dependencies { "androidx.constraintlayout:constraintlayout:${Versions.CONSTRAINT_LAYOUT}" const val KOIN_ANDROID = "io.insert-koin:koin-android:${Versions.KOIN}" const val FIREBASE_CRASHLYTICS = - "com.google.firebase:firebase-crashlytics:${Versions.FIREBASE_CRASHLYTICS}" - const val FIREBASE_CORE = "com.google.firebase:firebase-core:${Versions.FIREBASE_CORE}" + "com.google.firebase:firebase-crashlytics-ktx:${Versions.FIREBASE_CRASHLYTICS}" + const val FIREBASE_ANALYTICS = + "com.google.firebase:firebase-analytics-ktx:${Versions.FIREBASE_ANALYTICS}" const val DESUGARING = "com.android.tools:desugar_jdk_libs:${Versions.DESUGARING}" const val ANR_WATCH_DOG = "com.github.anrwatchdog:anrwatchdog:${Versions.ANR_WATCH_DOG}" const val LIFECYCLE_VIEWMODEL = @@ -122,5 +123,6 @@ object Dependencies { const val BILLING = ":billing" const val AD = ":ad" + const val ANALYTICS = ":analytics" } } diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 304e6d26d2..98cf12d8b6 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -13,7 +13,7 @@ object Versions { const val KOIN = "3.1.3" const val KERMIT = "1.0.0" const val MULTIPLATFORM_SETTINGS = "0.8.1" - const val FIREBASE_CORE = "20.0.0" + const val FIREBASE_ANALYTICS = "20.0.0" const val FIREBASE_CRASHLYTICS = "18.2.4" const val DESUGARING = "1.1.5" const val ANR_WATCH_DOG = "1.4.0" diff --git a/logmob b/logmob index eeae1b6af5..ff9022a67e 160000 --- a/logmob +++ b/logmob @@ -1 +1 @@ -Subproject commit eeae1b6af5d6a05db244d95e902eee771c5f30e0 +Subproject commit ff9022a67e58ce075dff1e65cda67146337aa697 diff --git a/settings.gradle.kts b/settings.gradle.kts index 3595287da5..b2b3ab80e7 100755 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -4,11 +4,17 @@ include( ":android", - ":backend", - ":client", // Shared with all FE targets - ":common", // Shared with all FE & BE targets ":billing", // android billing - ":ad" + ":ad", // android ads + ":analytics" +) + +include(":backend") + +// KMP +include( + ":client", // Shared with all FE targets + ":common" // Shared with all FE & BE targets ) // SubMobs From 9da931646edca5c8d5880fb27de640acdf24569b Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sat, 27 Nov 2021 16:12:05 +0100 Subject: [PATCH 04/23] [#185] Codecov reporting Improvments (#186) --- .github/workflows/main.yml | 11 ++++++++--- build.gradle.kts | 4 ++++ codecov.yml | 3 --- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 26f86e453b..61aa92f8ea 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -142,14 +142,19 @@ jobs: java-version: 11 - name: Run Kover - run: | - ./gradlew koverCollectReports --parallel + run: ./gradlew koverXmlReport koverCollectReports - name: Upload to Codecov uses: codecov/codecov-action@v2 with: token: ${{ secrets.CODECOV_TOKEN }} - files: client/build/reports/kover/report.xml, common/build/reports/kover/report.xml, scopemob/build/reports/kover/report.xml, parsermob/build/reports/kover/report.xml + files: build/kover/client.xml,build/kover/common.xml,build/kover/scopemob.xml,build/kover/parsermob.xml + + - name: Upload to Codacy + uses: codacy/codacy-coverage-reporter-action@v1 + with: + project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} + coverage-reports: build/kover/client.xml,build/kover/common.xml,build/kover/scopemob.xml,build/kover/parsermob.xml - name: Set Job Status id: status diff --git a/build.gradle.kts b/build.gradle.kts index 70765f45ed..fa9e09fe1d 100755 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -50,3 +50,7 @@ tasks.withType { gradleReleaseChannel = "current" rejectVersionIf { candidate.version.isNonStable() } } + +tasks.koverCollectReports { + outputDir.set(layout.buildDirectory.dir("$buildDir/kover")) +} diff --git a/codecov.yml b/codecov.yml index 099657d4b9..fea829c0e2 100644 --- a/codecov.yml +++ b/codecov.yml @@ -6,6 +6,3 @@ coverage: comment: layout: "reach, header, diff, changes, uncovered, tree, flags, files" behavior: default - -ignore: - - "src/main/res/values*/*" From b1c94f97029843a40083c8e531d873a5cf4715d3 Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sat, 27 Nov 2021 17:55:06 +0100 Subject: [PATCH 05/23] [#239] Tracking screen views (#242) --- .../github/analytics/AnalyticsManager.kt | 5 +++++ .../github/analytics/AnalyticsManagerImpl.kt | 17 +++++++++++++++++ android/src/main/AndroidManifest.xml | 4 ++++ .../ccc/android/di/PlatformModule.kt | 3 +++ .../android/ui/adremove/AdRemoveBottomSheet.kt | 7 +++++++ .../ccc/android/ui/bar/BarBottomSheet.kt | 11 +++++++++-- .../android/ui/calculator/CalculatorFragment.kt | 7 +++++++ .../android/ui/currencies/CurrenciesFragment.kt | 3 +++ .../ccc/android/ui/settings/SettingsFragment.kt | 3 +++ .../ccc/android/ui/slider/SliderFragment.kt | 9 +++++++++ 10 files changed, 67 insertions(+), 2 deletions(-) create mode 100644 analytics/src/main/java/com/mustafaozhan/github/analytics/AnalyticsManager.kt create mode 100644 analytics/src/main/java/com/mustafaozhan/github/analytics/AnalyticsManagerImpl.kt diff --git a/analytics/src/main/java/com/mustafaozhan/github/analytics/AnalyticsManager.kt b/analytics/src/main/java/com/mustafaozhan/github/analytics/AnalyticsManager.kt new file mode 100644 index 0000000000..b2c78d3154 --- /dev/null +++ b/analytics/src/main/java/com/mustafaozhan/github/analytics/AnalyticsManager.kt @@ -0,0 +1,5 @@ +package com.mustafaozhan.github.analytics + +interface AnalyticsManager { + fun trackScreen(screenName: String) +} diff --git a/analytics/src/main/java/com/mustafaozhan/github/analytics/AnalyticsManagerImpl.kt b/analytics/src/main/java/com/mustafaozhan/github/analytics/AnalyticsManagerImpl.kt new file mode 100644 index 0000000000..e4a5df5772 --- /dev/null +++ b/analytics/src/main/java/com/mustafaozhan/github/analytics/AnalyticsManagerImpl.kt @@ -0,0 +1,17 @@ +package com.mustafaozhan.github.analytics + +import com.google.firebase.analytics.FirebaseAnalytics +import com.google.firebase.analytics.ktx.analytics +import com.google.firebase.analytics.ktx.logEvent +import com.google.firebase.ktx.Firebase + +class AnalyticsManagerImpl : AnalyticsManager { + private val firebaseAnalytics by lazy { Firebase.analytics } + + override fun trackScreen(screenName: String) { + firebaseAnalytics.logEvent(FirebaseAnalytics.Event.SCREEN_VIEW) { + param(FirebaseAnalytics.Param.SCREEN_NAME, screenName) + param(FirebaseAnalytics.Param.SCREEN_CLASS, screenName) + } + } +} diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 90a5d80cf5..2d460dc864 100755 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -38,6 +38,10 @@ android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="@string/android_admob_app_id" /> + + diff --git a/android/src/main/java/com/github/mustafaozhan/ccc/android/di/PlatformModule.kt b/android/src/main/java/com/github/mustafaozhan/ccc/android/di/PlatformModule.kt index 494a8961e4..30b0f4abe4 100644 --- a/android/src/main/java/com/github/mustafaozhan/ccc/android/di/PlatformModule.kt +++ b/android/src/main/java/com/github/mustafaozhan/ccc/android/di/PlatformModule.kt @@ -4,9 +4,12 @@ import com.github.mustafaozhan.ad.AdManager import com.github.mustafaozhan.ad.AdManagerImpl import com.github.mustafaozhan.billing.BillingManager import com.github.mustafaozhan.billing.BillingManagerImpl +import com.mustafaozhan.github.analytics.AnalyticsManager +import com.mustafaozhan.github.analytics.AnalyticsManagerImpl import org.koin.dsl.module var platformModule = module { single { BillingManagerImpl(get()) } single { AdManagerImpl() } + single { AnalyticsManagerImpl() } } diff --git a/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/adremove/AdRemoveBottomSheet.kt b/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/adremove/AdRemoveBottomSheet.kt index 3dae3919a9..8fd7cd4f8f 100644 --- a/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/adremove/AdRemoveBottomSheet.kt +++ b/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/adremove/AdRemoveBottomSheet.kt @@ -21,6 +21,7 @@ import com.github.mustafaozhan.ccc.android.util.toRemoveAdDataList import com.github.mustafaozhan.ccc.client.model.RemoveAdType import com.github.mustafaozhan.ccc.client.viewmodel.adremove.AdRemoveEffect import com.github.mustafaozhan.ccc.client.viewmodel.adremove.AdRemoveViewModel +import com.mustafaozhan.github.analytics.AnalyticsManager import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import mustafaozhan.github.com.mycurrencies.R @@ -31,6 +32,7 @@ import org.koin.androidx.viewmodel.ext.android.viewModel @Suppress("TooManyFunctions") class AdRemoveBottomSheet : BaseVBBottomSheetDialogFragment() { + private val analyticsManager: AnalyticsManager by inject() private val adManager: AdManager by inject() private val billingManager: BillingManager by inject() private val adRemoveViewModel: AdRemoveViewModel by viewModel() @@ -59,6 +61,11 @@ class AdRemoveBottomSheet : BaseVBBottomSheetDialogFragment() { +class BarBottomSheet : BaseVBBottomSheetDialogFragment() { + private val analyticsManager: AnalyticsManager by inject() private val barViewModel: BarViewModel by viewModel() private lateinit var barAdapter: BarAdapter @@ -45,6 +47,11 @@ class BarBottomSheet : super.onDestroyView() } + override fun onResume() { + super.onResume() + analyticsManager.trackScreen(this::class.simpleName.toString()) + } + private fun initViews() { barAdapter = BarAdapter(barViewModel.event) binding.recyclerViewBar.adapter = barAdapter diff --git a/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/calculator/CalculatorFragment.kt b/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/calculator/CalculatorFragment.kt index 8f27a8a623..c0a4eae4bb 100755 --- a/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/calculator/CalculatorFragment.kt +++ b/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/calculator/CalculatorFragment.kt @@ -22,6 +22,7 @@ import com.github.mustafaozhan.ccc.android.util.showSnack import com.github.mustafaozhan.ccc.client.util.toValidList import com.github.mustafaozhan.ccc.client.viewmodel.calculator.CalculatorEffect import com.github.mustafaozhan.ccc.client.viewmodel.calculator.CalculatorViewModel +import com.mustafaozhan.github.analytics.AnalyticsManager import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import mustafaozhan.github.com.mycurrencies.R @@ -31,6 +32,7 @@ import org.koin.androidx.viewmodel.ext.android.viewModel class CalculatorFragment : BaseVBFragment() { + private val analyticsManager: AnalyticsManager by inject() private val adManager: AdManager by inject() private val calculatorViewModel: CalculatorViewModel by viewModel() @@ -48,6 +50,11 @@ class CalculatorFragment : BaseVBFragment() { setListeners() } + override fun onResume() { + super.onResume() + analyticsManager.trackScreen(this::class.simpleName.toString()) + } + override fun onDestroyView() { Logger.i { "CalculatorFragment onDestroyView" } binding.adViewContainer.removeAllViews() diff --git a/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/currencies/CurrenciesFragment.kt b/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/currencies/CurrenciesFragment.kt index 6ca84e9331..f4696813b3 100755 --- a/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/currencies/CurrenciesFragment.kt +++ b/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/currencies/CurrenciesFragment.kt @@ -24,6 +24,7 @@ import com.github.mustafaozhan.ccc.android.util.showSnack import com.github.mustafaozhan.ccc.android.util.visibleIf import com.github.mustafaozhan.ccc.client.viewmodel.currencies.CurrenciesEffect import com.github.mustafaozhan.ccc.client.viewmodel.currencies.CurrenciesViewModel +import com.mustafaozhan.github.analytics.AnalyticsManager import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import mustafaozhan.github.com.mycurrencies.R @@ -33,6 +34,7 @@ import org.koin.androidx.viewmodel.ext.android.viewModel class CurrenciesFragment : BaseVBFragment() { + private val analyticsManager: AnalyticsManager by inject() private val adManager: AdManager by inject() private val currenciesViewModel: CurrenciesViewModel by viewModel() @@ -155,6 +157,7 @@ class CurrenciesFragment : BaseVBFragment() { override fun onResume() { super.onResume() + analyticsManager.trackScreen(this::class.simpleName.toString()) Logger.i { "CurrenciesFragment onResume" } currenciesViewModel.hideSelectionVisibility() currenciesViewModel.event.onQueryChange("") diff --git a/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/settings/SettingsFragment.kt b/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/settings/SettingsFragment.kt index 5742058aa9..b955d50f79 100644 --- a/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/settings/SettingsFragment.kt +++ b/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/settings/SettingsFragment.kt @@ -22,6 +22,7 @@ import com.github.mustafaozhan.ccc.android.util.visibleIf import com.github.mustafaozhan.ccc.client.model.AppTheme import com.github.mustafaozhan.ccc.client.viewmodel.settings.SettingsEffect import com.github.mustafaozhan.ccc.client.viewmodel.settings.SettingsViewModel +import com.mustafaozhan.github.analytics.AnalyticsManager import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import mustafaozhan.github.com.mycurrencies.R @@ -32,6 +33,7 @@ import org.koin.androidx.viewmodel.ext.android.viewModel @Suppress("TooManyFunctions") class SettingsFragment : BaseVBFragment() { + private val analyticsManager: AnalyticsManager by inject() private val adManager: AdManager by inject() private val settingsViewModel: SettingsViewModel by viewModel() @@ -200,6 +202,7 @@ class SettingsFragment : BaseVBFragment() { override fun onResume() { super.onResume() + analyticsManager.trackScreen(this::class.simpleName.toString()) Logger.i { "SettingsFragment onResume" } } diff --git a/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/slider/SliderFragment.kt b/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/slider/SliderFragment.kt index 9fa3318103..d764a026d8 100644 --- a/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/slider/SliderFragment.kt +++ b/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/slider/SliderFragment.kt @@ -15,11 +15,15 @@ import com.github.mustafaozhan.basemob.fragment.BaseVBFragment import com.github.mustafaozhan.ccc.android.util.gone import com.github.mustafaozhan.ccc.android.util.visible import com.github.mustafaozhan.scopemob.whether +import com.mustafaozhan.github.analytics.AnalyticsManager import mustafaozhan.github.com.mycurrencies.R import mustafaozhan.github.com.mycurrencies.databinding.FragmentSliderBinding +import org.koin.android.ext.android.inject class SliderFragment : BaseVBFragment() { + private val analyticsManager: AnalyticsManager by inject() + override fun getViewBinding() = FragmentSliderBinding.inflate(layoutInflater) override fun onCreate(savedInstanceState: Bundle?) { @@ -41,6 +45,8 @@ class SliderFragment : BaseVBFragment() { override fun onResume() { super.onResume() + analyticsManager.trackScreen("${this::class.simpleName} 0") + Logger.i { "SliderFragment onResume" } binding.progressBar.gone() } @@ -51,7 +57,10 @@ class SliderFragment : BaseVBFragment() { addOnPageChangeListener(object : ViewPager.OnPageChangeListener { override fun onPageSelected(position: Int) { + analyticsManager.trackScreen("${this::class.simpleName} $position") + Logger.i { "SliderFragment onPageSelected $position" } + addBottomDots(position) binding.btnNext.text = if (position == layouts.size - 1) { From 56d15558e220b4d29c052bb9dd31f94fb1b0cdbb Mon Sep 17 00:00:00 2001 From: Mustafa Ozhan Date: Sat, 27 Nov 2021 23:43:05 +0100 Subject: [PATCH 06/23] [#243] Change BarBottomSheet to ChangeBaseBottomSheet (#244) --- .../ui/adremove/AdRemoveBottomSheet.kt | 4 +- .../ui/calculator/CalculatorFragment.kt | 2 +- .../ChangeBaseAdapter.kt} | 20 ++++---- .../ChangeBaseBottomSheet.kt} | 46 +++++++++---------- ...ctor_bar.xml => selector_bottom_sheet.xml} | 0 .../res/layout-land/fragment_calculator.xml | 2 +- .../res/layout/bottom_sheet_ad_remove.xml | 4 +- ...t_bar.xml => bottom_sheet_change_base.xml} | 6 +-- .../main/res/layout/fragment_calculator.xml | 2 +- .../main/res/layout/fragment_currencies.xml | 2 +- .../src/main/res/layout/fragment_settings.xml | 2 +- .../{item_bar.xml => item_change_base.xml} | 6 +-- .../src/main/res/navigation/main_graph.xml | 14 +++--- android/src/main/res/values/styles.xml | 18 ++++---- .../ccc/client/di/module/ClientModule.kt | 4 +- .../viewmodel/{bar => changebase}/BarSEED.kt | 14 +++--- .../ChangeBaseViewModel.kt} | 20 ++++---- ...odelTest.kt => ChangeBaseViewModelTest.kt} | 14 +++--- ios/CCC.xcodeproj/project.pbxproj | 8 ++-- ios/CCC/DI/Koin.swift | 8 ++-- ios/CCC/UI/CalculatorView.swift | 2 +- .../{BarView.swift => ChangeBaseView.swift} | 16 +++---- 22 files changed, 107 insertions(+), 107 deletions(-) rename android/src/main/java/com/github/mustafaozhan/ccc/android/ui/{bar/BarAdapter.kt => changebase/ChangeBaseAdapter.kt} (60%) rename android/src/main/java/com/github/mustafaozhan/ccc/android/ui/{bar/BarBottomSheet.kt => changebase/ChangeBaseBottomSheet.kt} (60%) rename android/src/main/res/drawable/{selector_bar.xml => selector_bottom_sheet.xml} (100%) rename android/src/main/res/layout/{bottom_sheet_bar.xml => bottom_sheet_change_base.xml} (93%) rename android/src/main/res/layout/{item_bar.xml => item_change_base.xml} (87%) rename client/src/commonMain/kotlin/com/github/mustafaozhan/ccc/client/viewmodel/{bar => changebase}/BarSEED.kt (70%) rename client/src/commonMain/kotlin/com/github/mustafaozhan/ccc/client/viewmodel/{bar/BarViewModel.kt => changebase/ChangeBaseViewModel.kt} (74%) rename client/src/commonTest/kotlin/com/github/mustafaozhan/ccc/client/viewmodel/{BarViewModelTest.kt => ChangeBaseViewModelTest.kt} (62%) rename ios/CCC/UI/{BarView.swift => ChangeBaseView.swift} (87%) diff --git a/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/adremove/AdRemoveBottomSheet.kt b/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/adremove/AdRemoveBottomSheet.kt index 8fd7cd4f8f..4b7e3987b4 100644 --- a/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/adremove/AdRemoveBottomSheet.kt +++ b/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/adremove/AdRemoveBottomSheet.kt @@ -57,7 +57,7 @@ class AdRemoveBottomSheet : BaseVBBottomSheetDialogFragment() { ) CalculatorEffect.OpenBar -> navigate( R.id.calculatorFragment, - CalculatorFragmentDirections.actionCalculatorFragmentToBarBottomSheet() + CalculatorFragmentDirections.actionCalculatorFragmentToChangeBaseBottomSheet() ) CalculatorEffect.OpenSettings -> navigate( R.id.calculatorFragment, diff --git a/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/bar/BarAdapter.kt b/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/changebase/ChangeBaseAdapter.kt similarity index 60% rename from android/src/main/java/com/github/mustafaozhan/ccc/android/ui/bar/BarAdapter.kt rename to android/src/main/java/com/github/mustafaozhan/ccc/android/ui/changebase/ChangeBaseAdapter.kt index 1e0cd0454e..7e57edf5b1 100644 --- a/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/bar/BarAdapter.kt +++ b/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/changebase/ChangeBaseAdapter.kt @@ -1,4 +1,4 @@ -package com.github.mustafaozhan.ccc.android.ui.bar +package com.github.mustafaozhan.ccc.android.ui.changebase import android.view.LayoutInflater import android.view.ViewGroup @@ -6,31 +6,31 @@ import androidx.recyclerview.widget.DiffUtil import com.github.mustafaozhan.basemob.adapter.BaseVBRecyclerViewAdapter import com.github.mustafaozhan.ccc.android.util.setBackgroundByName import com.github.mustafaozhan.ccc.client.model.Currency -import com.github.mustafaozhan.ccc.client.viewmodel.bar.BarEvent -import mustafaozhan.github.com.mycurrencies.databinding.ItemBarBinding +import com.github.mustafaozhan.ccc.client.viewmodel.changebase.ChangeBaseEvent +import mustafaozhan.github.com.mycurrencies.databinding.ItemChangeBaseBinding -class BarAdapter( - private val barEvent: BarEvent -) : BaseVBRecyclerViewAdapter(CalculatorDiffer()) { +class ChangeBaseAdapter( + private val changeBaseEvent: ChangeBaseEvent +) : BaseVBRecyclerViewAdapter(CalculatorDiffer()) { override fun onCreateViewHolder( parent: ViewGroup, viewType: Int ) = CalculatorVBViewHolder( - ItemBarBinding.inflate( + ItemChangeBaseBinding.inflate( LayoutInflater.from(parent.context), parent, false ) ) - inner class CalculatorVBViewHolder(itemBinding: ItemBarBinding) : - BaseVBViewHolder(itemBinding) { + inner class CalculatorVBViewHolder(itemBinding: ItemChangeBaseBinding) : + BaseVBViewHolder(itemBinding) { override fun onItemBind(item: Currency) = with(itemBinding) { imgIcon.setBackgroundByName(item.name) txtSettingItem.text = item.getVariablesOneLine() - root.setOnClickListener { barEvent.onItemClick(item) } + root.setOnClickListener { changeBaseEvent.onItemClick(item) } } } diff --git a/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/bar/BarBottomSheet.kt b/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/changebase/ChangeBaseBottomSheet.kt similarity index 60% rename from android/src/main/java/com/github/mustafaozhan/ccc/android/ui/bar/BarBottomSheet.kt rename to android/src/main/java/com/github/mustafaozhan/ccc/android/ui/changebase/ChangeBaseBottomSheet.kt index c7d84c1043..ca9110abb6 100644 --- a/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/bar/BarBottomSheet.kt +++ b/android/src/main/java/com/github/mustafaozhan/ccc/android/ui/changebase/ChangeBaseBottomSheet.kt @@ -1,7 +1,7 @@ /* * Copyright (c) 2021 Mustafa Ozhan. All rights reserved. */ -package com.github.mustafaozhan.ccc.android.ui.bar +package com.github.mustafaozhan.ccc.android.ui.changebase import android.os.Bundle import android.view.View @@ -13,28 +13,28 @@ import com.github.mustafaozhan.ccc.android.ui.calculator.CalculatorFragment.Comp import com.github.mustafaozhan.ccc.android.util.setNavigationResult import com.github.mustafaozhan.ccc.android.util.showLoading import com.github.mustafaozhan.ccc.android.util.visibleIf -import com.github.mustafaozhan.ccc.client.viewmodel.bar.BarEffect -import com.github.mustafaozhan.ccc.client.viewmodel.bar.BarViewModel +import com.github.mustafaozhan.ccc.client.viewmodel.changebase.ChangeBaseEffect +import com.github.mustafaozhan.ccc.client.viewmodel.changebase.ChangeBaseViewModel import com.mustafaozhan.github.analytics.AnalyticsManager import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach import mustafaozhan.github.com.mycurrencies.R -import mustafaozhan.github.com.mycurrencies.databinding.BottomSheetBarBinding +import mustafaozhan.github.com.mycurrencies.databinding.BottomSheetChangeBaseBinding import org.koin.android.ext.android.inject import org.koin.androidx.viewmodel.ext.android.viewModel -class BarBottomSheet : BaseVBBottomSheetDialogFragment() { +class ChangeBaseBottomSheet : BaseVBBottomSheetDialogFragment() { private val analyticsManager: AnalyticsManager by inject() - private val barViewModel: BarViewModel by viewModel() + private val changeBaseViewModel: ChangeBaseViewModel by viewModel() - private lateinit var barAdapter: BarAdapter + private lateinit var changeBaseAdapter: ChangeBaseAdapter - override fun getViewBinding() = BottomSheetBarBinding.inflate(layoutInflater) + override fun getViewBinding() = BottomSheetChangeBaseBinding.inflate(layoutInflater) override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - Logger.i { "BarBottomSheet onViewCreated" } + Logger.i { "ChangeBaserBottomSheet onViewCreated" } initViews() observeStates() observeEffects() @@ -42,8 +42,8 @@ class BarBottomSheet : BaseVBBottomSheetDialogFragment() } override fun onDestroyView() { - Logger.i { "BarBottomSheet onDestroyView" } - binding.recyclerViewBar.adapter = null + Logger.i { "ChangeBaseBottomSheet onDestroyView" } + binding.recyclerViewChangeBase.adapter = null super.onDestroyView() } @@ -53,32 +53,32 @@ class BarBottomSheet : BaseVBBottomSheetDialogFragment() } private fun initViews() { - barAdapter = BarAdapter(barViewModel.event) - binding.recyclerViewBar.adapter = barAdapter + changeBaseAdapter = ChangeBaseAdapter(changeBaseViewModel.event) + binding.recyclerViewChangeBase.adapter = changeBaseAdapter } - private fun observeStates() = barViewModel.state + private fun observeStates() = changeBaseViewModel.state .flowWithLifecycle(lifecycle) .onEach { with(it) { - barAdapter.submitList(currencyList) + changeBaseAdapter.submitList(currencyList) with(binding) { loadingView.showLoading(loading) - recyclerViewBar.visibleIf(enoughCurrency) + recyclerViewChangeBase.visibleIf(enoughCurrency) txtNoEnoughCurrency.visibleIf(!enoughCurrency) btnSelect.visibleIf(!enoughCurrency) } } }.launchIn(viewLifecycleOwner.lifecycleScope) - private fun observeEffects() = barViewModel.effect + private fun observeEffects() = changeBaseViewModel.effect .flowWithLifecycle(lifecycle) .onEach { viewEffect -> - Logger.i { "BarBottomSheet observeEffects ${viewEffect::class.simpleName}" } + Logger.i { "ChangeBaseBottomSheet observeEffects ${viewEffect::class.simpleName}" } when (viewEffect) { - is BarEffect.ChangeBase -> { + is ChangeBaseEffect.BaseChange -> { setNavigationResult( R.id.calculatorFragment, viewEffect.newBase, @@ -86,14 +86,14 @@ class BarBottomSheet : BaseVBBottomSheetDialogFragment() ) dismissDialog() } - BarEffect.OpenCurrencies -> navigate( - R.id.barBottomSheet, - BarBottomSheetDirections.actionBarBottomSheetToCurrenciesFragment() + ChangeBaseEffect.OpenCurrencies -> navigate( + R.id.changeBaseBottomSheet, + ChangeBaseBottomSheetDirections.actionChangeBaseBottomSheetToCurrenciesFragment() ) } }.launchIn(viewLifecycleOwner.lifecycleScope) private fun setListeners() = binding.btnSelect.setOnClickListener { - barViewModel.event.onSelectClick() + changeBaseViewModel.event.onSelectClick() } } diff --git a/android/src/main/res/drawable/selector_bar.xml b/android/src/main/res/drawable/selector_bottom_sheet.xml similarity index 100% rename from android/src/main/res/drawable/selector_bar.xml rename to android/src/main/res/drawable/selector_bottom_sheet.xml diff --git a/android/src/main/res/layout-land/fragment_calculator.xml b/android/src/main/res/layout-land/fragment_calculator.xml index b5e66ee3b6..0fefb23894 100644 --- a/android/src/main/res/layout-land/fragment_calculator.xml +++ b/android/src/main/res/layout-land/fragment_calculator.xml @@ -54,7 +54,7 @@ + app:layout_constraintTop_toBottomOf="@+id/recycler_view_change_base" /> \ No newline at end of file diff --git a/android/src/main/res/layout/fragment_calculator.xml b/android/src/main/res/layout/fragment_calculator.xml index f71c2ef4dd..3d009f2f1d 100755 --- a/android/src/main/res/layout/fragment_calculator.xml +++ b/android/src/main/res/layout/fragment_calculator.xml @@ -47,7 +47,7 @@ diff --git a/android/src/main/res/layout/fragment_currencies.xml b/android/src/main/res/layout/fragment_currencies.xml index 6f36932973..b4efa72ec1 100755 --- a/android/src/main/res/layout/fragment_currencies.xml +++ b/android/src/main/res/layout/fragment_currencies.xml @@ -16,7 +16,7 @@ diff --git a/android/src/main/res/layout/fragment_settings.xml b/android/src/main/res/layout/fragment_settings.xml index 164d6cd595..0eee970928 100644 --- a/android/src/main/res/layout/fragment_settings.xml +++ b/android/src/main/res/layout/fragment_settings.xml @@ -35,7 +35,7 @@ + style="@style/ChangeBaseItemLayout"> + android:id="@+id/action_calculatorFragment_to_changeBaseBottomSheet" + app:destination="@id/changeBaseBottomSheet" /> + android:id="@+id/changeBaseBottomSheet" + android:name="com.github.mustafaozhan.ccc.android.ui.changebase.ChangeBaseBottomSheet" + android:label="ChangeBaseBottomSheet" + tools:layout="@layout/bottom_sheet_change_base"> diff --git a/android/src/main/res/values/styles.xml b/android/src/main/res/values/styles.xml index 3cbb5755b0..bb8acd2bb9 100755 --- a/android/src/main/res/values/styles.xml +++ b/android/src/main/res/values/styles.xml @@ -266,13 +266,13 @@ @style/BaseTextStyle - - @@ -289,7 +289,7 @@ @dimen/margin_eight - + - @@ -503,14 +503,14 @@ false - - - @@ -524,7 +524,7 @@