From de0fb3a6b5013d2c0ee4d8ba9fa76928111db1b7 Mon Sep 17 00:00:00 2001 From: "goksu.turker" Date: Thu, 5 Dec 2024 14:10:56 +0300 Subject: [PATCH] Add success failure status for events - Migrate EventDatabase - Update README.md --- README.md | 7 +++++++ .../devtools/analyticslogger/AnalyticsLogger.kt | 9 +++++++++ libraries/analytics-logger/build.gradle | 2 +- .../devtools/analyticslogger/AnalyticsLogger.kt | 17 +++++++++++++++++ .../internal/NotificationManager.kt | 2 ++ .../internal/data/database/EventDatabase.kt | 16 ++++++++++++++-- .../internal/data/model/EventEntity.kt | 1 + .../internal/domain/manager/EventManager.kt | 2 +- .../internal/domain/manager/EventManagerImpl.kt | 3 +++ .../internal/domain/model/Event.kt | 1 + .../analyticslogger/internal/ui/EventAdapter.kt | 17 +++++++++++++++++ .../internal/ui/detail/DetailFragment.kt | 13 ++++++++++++- .../analytics_logger_failure_background.xml | 5 +++++ .../analytics_logger_success_background.xml | 5 +++++ .../layout/analytics_logger_fragment_detail.xml | 6 ++++-- .../src/main/res/values/colors.xml | 2 ++ .../android/devtools/ui/main/MainFragment.kt | 6 ++++++ 17 files changed, 107 insertions(+), 7 deletions(-) create mode 100644 libraries/analytics-logger/src/main/res/drawable/analytics_logger_failure_background.xml create mode 100644 libraries/analytics-logger/src/main/res/drawable/analytics_logger_success_background.xml diff --git a/README.md b/README.md index da961e5..6219c7c 100644 --- a/README.md +++ b/README.md @@ -99,6 +99,13 @@ AnalyticsLogger.report( value = "{\"category\": \"Cart\", \"data\": \"TestData\" }", // Should be Json string. platform = "EventPlatform", ) +// or +AnalyticsLogger.report( + key = "eventKey", + value = "{\"category\": \"Cart\", \"data\": \"TestData\" }", // Should be Json string. + platform = "EventPlatform", + isSuccess = true, // send your event result +) ``` ### Setup diff --git a/libraries/analytics-logger-no-op/src/main/java/com/trendyol/android/devtools/analyticslogger/AnalyticsLogger.kt b/libraries/analytics-logger-no-op/src/main/java/com/trendyol/android/devtools/analyticslogger/AnalyticsLogger.kt index 4e15e80..f1adbb3 100644 --- a/libraries/analytics-logger-no-op/src/main/java/com/trendyol/android/devtools/analyticslogger/AnalyticsLogger.kt +++ b/libraries/analytics-logger-no-op/src/main/java/com/trendyol/android/devtools/analyticslogger/AnalyticsLogger.kt @@ -24,4 +24,13 @@ object AnalyticsLogger { fun report(key: String?, value: String?, platform: String?) { // no-op } + + fun report( + key: String?, + value: String?, + platform: String?, + isSuccess: Boolean?, + ) { + // no-op + } } diff --git a/libraries/analytics-logger/build.gradle b/libraries/analytics-logger/build.gradle index 1bf93a1..c1cba90 100644 --- a/libraries/analytics-logger/build.gradle +++ b/libraries/analytics-logger/build.gradle @@ -37,7 +37,7 @@ android { ext { PUBLISH_GROUP_ID = 'com.trendyol.android.devtools' - PUBLISH_VERSION = '0.3.0' + PUBLISH_VERSION = '0.4.0' PUBLISH_ARTIFACT_ID = 'analytics-logger' PUBLISH_DESCRIPTION = "Android Analytics Event Logger" PUBLISH_URL = "https://github.com/Trendyol/android-dev-tools" diff --git a/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/AnalyticsLogger.kt b/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/AnalyticsLogger.kt index 3c80674..044d8d0 100644 --- a/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/AnalyticsLogger.kt +++ b/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/AnalyticsLogger.kt @@ -31,4 +31,21 @@ object AnalyticsLogger { fun report(key: String?, value: String?, platform: String?) { instance?.reportEvent(key, value, platform) ?: Log.w(TAG, INIT_ERROR_MESSAGE) } + + /** + * Reports an event with the specified key, value, platform, and success status. + * + * @param key The key identifying the event. Can be null. + * @param value The value associated with the event. Can be null. + * @param platform The platform related to the event. Can be null. + * @param isSuccess Indicates whether the operation was successful. Can be null. + */ + fun report( + key: String?, + value: String?, + platform: String?, + isSuccess: Boolean?, + ) { + instance?.reportEvent(key, value, platform, isSuccess) ?: Log.w(TAG, INIT_ERROR_MESSAGE) + } } diff --git a/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/NotificationManager.kt b/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/NotificationManager.kt index 133fa8c..d2de9ac 100644 --- a/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/NotificationManager.kt +++ b/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/NotificationManager.kt @@ -60,11 +60,13 @@ internal class NotificationManager constructor(private var showNotification: Boo key: String?, value: String?, platform: String?, + isSuccess: Boolean? = null, ) = scope.launch { analyticsContainer.eventManager.insert( key = key, value = value, platform = platform, + isSuccess = isSuccess, ) lastEvent = key to platform updateNotification( diff --git a/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/data/database/EventDatabase.kt b/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/data/database/EventDatabase.kt index eb3ad7d..0a77fc2 100644 --- a/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/data/database/EventDatabase.kt +++ b/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/data/database/EventDatabase.kt @@ -4,10 +4,12 @@ import android.content.Context import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase +import androidx.room.migration.Migration +import androidx.sqlite.db.SupportSQLiteDatabase import com.trendyol.android.devtools.analyticslogger.internal.data.dao.EventDao import com.trendyol.android.devtools.analyticslogger.internal.data.model.EventEntity -@Database(entities = [EventEntity::class], version = 1) +@Database(entities = [EventEntity::class], version = 2) internal abstract class EventDatabase : RoomDatabase() { abstract fun eventDao(): EventDao @@ -18,7 +20,17 @@ internal abstract class EventDatabase : RoomDatabase() { context, EventDatabase::class.java, "analytics-logger-database-1", - ).build() + ) + .addMigrations(*migrations) + .build() } + + private val migrations = arrayOf( + object : Migration(1, 2) { + override fun migrate(db: SupportSQLiteDatabase) { + db.execSQL("ALTER TABLE event_entities ADD COLUMN isSuccess INTEGER") + } + }, + ) } } diff --git a/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/data/model/EventEntity.kt b/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/data/model/EventEntity.kt index 9d8ee27..3fbd7f4 100644 --- a/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/data/model/EventEntity.kt +++ b/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/data/model/EventEntity.kt @@ -11,4 +11,5 @@ internal data class EventEntity( @ColumnInfo(name = "value") val value: String?, @ColumnInfo(name = "platform") val platform: String?, @ColumnInfo(name = "date") val date: String?, + @ColumnInfo(name = "isSuccess") val isSuccess: Boolean?, ) diff --git a/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/domain/manager/EventManager.kt b/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/domain/manager/EventManager.kt index ca24ed8..a76cdad 100644 --- a/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/domain/manager/EventManager.kt +++ b/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/domain/manager/EventManager.kt @@ -6,7 +6,7 @@ internal interface EventManager { suspend fun find(query: String?, platform: String, page: Int, pageSize: Int): List - suspend fun insert(key: String?, value: String?, platform: String?) + suspend fun insert(key: String?, value: String?, platform: String?, isSuccess: Boolean? = null) suspend fun deleteAll() diff --git a/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/domain/manager/EventManagerImpl.kt b/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/domain/manager/EventManagerImpl.kt index 441bdee..a30069c 100644 --- a/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/domain/manager/EventManagerImpl.kt +++ b/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/domain/manager/EventManagerImpl.kt @@ -28,6 +28,7 @@ internal class EventManagerImpl( key: String?, value: String?, platform: String?, + isSuccess: Boolean?, ) { val dateFormat = SimpleDateFormat("HH:mm:ss", Locale.getDefault()) val date = dateFormat.format(Calendar.getInstance().time) @@ -38,6 +39,7 @@ internal class EventManagerImpl( value = value, platform = platform, date = date, + isSuccess = isSuccess, ) ) } @@ -70,6 +72,7 @@ internal class EventManagerImpl( json = eventEntity.value.beautify(moshi), platform = eventEntity.platform, date = eventEntity.date, + isSuccess = eventEntity.isSuccess, ) } diff --git a/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/domain/model/Event.kt b/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/domain/model/Event.kt index cb3b47d..02a1dd0 100644 --- a/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/domain/model/Event.kt +++ b/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/domain/model/Event.kt @@ -7,4 +7,5 @@ internal data class Event( val json: String?, val platform: String?, val date: String?, + val isSuccess: Boolean?, ) diff --git a/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/ui/EventAdapter.kt b/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/ui/EventAdapter.kt index 2d45d9a..4183025 100644 --- a/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/ui/EventAdapter.kt +++ b/libraries/analytics-logger/src/main/java/com/trendyol/android/devtools/analyticslogger/internal/ui/EventAdapter.kt @@ -1,12 +1,16 @@ package com.trendyol.android.devtools.analyticslogger.internal.ui +import android.content.Context import android.content.res.ColorStateList +import android.graphics.drawable.Drawable import android.graphics.drawable.GradientDrawable import android.view.LayoutInflater import android.view.ViewGroup +import androidx.core.content.ContextCompat import androidx.paging.PagingDataAdapter import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.RecyclerView +import com.trendyol.android.devtools.analyticslogger.R import com.trendyol.android.devtools.analyticslogger.databinding.AnalyticsLoggerItemEventBinding import com.trendyol.android.devtools.analyticslogger.internal.domain.model.Event import com.trendyol.android.devtools.analyticslogger.internal.factory.ColorFactory @@ -59,6 +63,7 @@ internal class EventAdapter : PagingDataAdapter R.drawable.analytics_logger_success_background + false -> R.drawable.analytics_logger_failure_background + null -> R.drawable.analytics_logger_json_background + } + } + private fun copyToClipboard() { val clipboard = context?.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager val data = (viewModel.detailState.value as? DetailState.Selected)?.event?.json.orEmpty() diff --git a/libraries/analytics-logger/src/main/res/drawable/analytics_logger_failure_background.xml b/libraries/analytics-logger/src/main/res/drawable/analytics_logger_failure_background.xml new file mode 100644 index 0000000..f027793 --- /dev/null +++ b/libraries/analytics-logger/src/main/res/drawable/analytics_logger_failure_background.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/analytics-logger/src/main/res/drawable/analytics_logger_success_background.xml b/libraries/analytics-logger/src/main/res/drawable/analytics_logger_success_background.xml new file mode 100644 index 0000000..84d0150 --- /dev/null +++ b/libraries/analytics-logger/src/main/res/drawable/analytics_logger_success_background.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/libraries/analytics-logger/src/main/res/layout/analytics_logger_fragment_detail.xml b/libraries/analytics-logger/src/main/res/layout/analytics_logger_fragment_detail.xml index 688c31a..c6fdb9b 100644 --- a/libraries/analytics-logger/src/main/res/layout/analytics_logger_fragment_detail.xml +++ b/libraries/analytics-logger/src/main/res/layout/analytics_logger_fragment_detail.xml @@ -3,6 +3,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical"> + app:layout_constraintVertical_bias="0" + tools:background="@drawable/analytics_logger_json_background"> #9b59b6 #e3e3e3 + #C4F0D8 + #f6dde1 diff --git a/sample/src/main/java/com/trendyol/android/devtools/ui/main/MainFragment.kt b/sample/src/main/java/com/trendyol/android/devtools/ui/main/MainFragment.kt index 62eef50..f64083f 100644 --- a/sample/src/main/java/com/trendyol/android/devtools/ui/main/MainFragment.kt +++ b/sample/src/main/java/com/trendyol/android/devtools/ui/main/MainFragment.kt @@ -75,6 +75,12 @@ class MainFragment : Fragment() { key = "OnMainFragmentSeenEvent", value = "{\"category\": \"Cart\", \"data\": \"TestData\" }", platform = "Firebase", + isSuccess = true, + ) + AnalyticsLogger.report( + key = "OnMainFragmentSeenFailEvent", + value = "{\"category\": \"Cart\", \"data\": \"TestData\" }", + platform = "Firebase", ) }