diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f61ad4c..d6076028 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,20 @@ Changelog ========= +## Version 5.3.2 + +_2021-04-26_ + +* Fix crash on editor history. + +## Version 5.3.1 + +_2021-04-25_ + +* Remove Timber dependency. +* Implement an optional logger. +* Update dependencies to more stable releases. + ## Version 5.3.0 _2021-04-10_ diff --git a/README.md b/README.md index 0fe384c9..07d1eec9 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ With this library you can: * drop view or trigger * search table, view or trigger * sort table, view or trigger per column +* execute any valid SQL command in editor per database connection ## Getting started To include _DbInspector_ in your project, you have to add buildscript dependencies in your project level `build.gradle` or `build.gradle.kts`: @@ -43,13 +44,13 @@ Then add the following dependencies in your app `build.gradle` or `build.gradle. **Groovy** ```groovy -debugImplementation "com.infinum.dbinspector:dbinspector:5.3.0" -releaseImplementation "com.infinum.dbinspector:dbinspector-no-op:5.3.0" +debugImplementation "com.infinum.dbinspector:dbinspector:5.3.2" +releaseImplementation "com.infinum.dbinspector:dbinspector-no-op:5.3.2" ``` **KotlinDSL** ```kotlin -debugImplementation("com.infinum.dbinspector:dbinspector:5.3.0") -releaseImplementation("com.infinum.dbinspector:dbinspector-no-op:5.3.0") +debugImplementation("com.infinum.dbinspector:dbinspector:5.3.2") +releaseImplementation("com.infinum.dbinspector:dbinspector-no-op:5.3.2") ``` ### Usage @@ -78,6 +79,25 @@ If you use _DbInspector_ for a specific flavor and need to override merged in la Please do mind and copy over the suppression comment line too, if you need it. Further modification can be done according to rules of [manifest merging](https://developer.android.com/studio/build/manifest-merge) and attributes of [activity-alias](https://developer.android.com/guide/topics/manifest/activity-alias-element) XML node. +## Editor + +![Editor](editor.png) + +_DbInspector_ has a build in editor scoped per database connection currently used. +It offers autocomplete of SQLite3 keywords and functions, current table and column names. +Built in editor also provides a history of executed statements, not matter if they were successful or not. +Hisotry of statements is persisted between sessions and can be cleared on demand at any point. +Panes between editors' input and result are scalable and can be adjusted by dragging the splitter between them. +Landscape mode is supported too for better result preview of large datasets. + +## Logging +_DbInspector_ provides a independent and built in logger mechanism. Per default logger is initiated as an `EmptyLogger` omitting any output whatsoever. +In case logs output is required, `AndroidLogger` should be used as shown below: +```kotlin +DbInspector.show(logger = AndroidLogger()) +``` +Additionally, `AndroidLogger` uses `Level` to filter out between info, debug, error or no messages at all. + ## Requirements Minimum required API level to use _DbInspector_ is **21** known as [Android 5.0, Lollipop](https://www.android.com/versions/lollipop-5-0/). As of 4.0.0 version, AndroidX is required. If you cannot unfortunately migrate your project, keep the previous version until you get the opportunity to migrate to AndroidX. diff --git a/config.gradle b/config.gradle index 0054d874..4ad4289e 100644 --- a/config.gradle +++ b/config.gradle @@ -7,7 +7,7 @@ ext { ] releaseConfig = [ "group" : "com.infinum.dbinspector", - "version" : "5.3.0", - "versionCode": 5 * 100 * 100 + 3 * 100 + 0 + "version" : "5.3.2", + "versionCode": 5 * 100 * 100 + 3 * 100 + 2 ] } \ No newline at end of file diff --git a/dbinspector-no-op/proguard-rules.txt b/dbinspector-no-op/proguard-rules.txt index 4768f1ab..e33e1232 100644 --- a/dbinspector-no-op/proguard-rules.txt +++ b/dbinspector-no-op/proguard-rules.txt @@ -1,3 +1,16 @@ -keep public class com.infinum.dbinspector.DbInspector { public protected *; } +-keep public class com.infinum.dbinspector.data.models.memory.logger.Level { + public protected *; +} +-keep public class com.infinum.dbinspector.data.sources.memory.logger.Logger { + public protected *; +} +-keep public class com.infinum.dbinspector.data.sources.memory.logger.EmptyLogger { + public protected *; +} +-keep public class com.infinum.dbinspector.data.sources.memory.logger.AndroidLogger { + public protected *; +} + diff --git a/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/DbInspector.kt b/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/DbInspector.kt index 499abb38..2306933a 100644 --- a/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/DbInspector.kt +++ b/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/DbInspector.kt @@ -1,7 +1,13 @@ +@file:Suppress("UNUSED_PARAMETER") + package com.infinum.dbinspector +import com.infinum.dbinspector.data.sources.memory.logger.EmptyLogger +import com.infinum.dbinspector.data.sources.memory.logger.Logger + +@Suppress("UnusedPrivateMember") public object DbInspector { @JvmStatic - public fun show(): Unit = Unit + public fun show(logger: Logger = EmptyLogger()): Unit = Unit } diff --git a/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/data/models/memory/logger/Level.kt b/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/data/models/memory/logger/Level.kt new file mode 100644 index 00000000..65097e1e --- /dev/null +++ b/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/data/models/memory/logger/Level.kt @@ -0,0 +1,8 @@ +package com.infinum.dbinspector.data.models.memory.logger + +public enum class Level { + DEBUG, + INFO, + ERROR, + NONE +} diff --git a/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/logger/AndroidLogger.kt b/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/logger/AndroidLogger.kt new file mode 100644 index 00000000..5ca49697 --- /dev/null +++ b/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/logger/AndroidLogger.kt @@ -0,0 +1,24 @@ +package com.infinum.dbinspector.data.sources.memory.logger + +import android.util.Log +import com.infinum.dbinspector.data.models.memory.logger.Level + +public class AndroidLogger( + level: Level = Level.INFO +) : Logger(level) { + + override fun log(level: Level, message: String) { + if (this.level <= level) { + logOnLevel(message, level) + } + } + + private fun logOnLevel(message: String, level: Level) { + when (level) { + Level.DEBUG -> Log.d(tag(), message) + Level.INFO -> Log.i(tag(), message) + Level.ERROR -> Log.e(tag(), message) + else -> Log.e(tag(), message) + } + } +} diff --git a/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/logger/EmptyLogger.kt b/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/logger/EmptyLogger.kt new file mode 100644 index 00000000..ebe1025c --- /dev/null +++ b/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/logger/EmptyLogger.kt @@ -0,0 +1,8 @@ +package com.infinum.dbinspector.data.sources.memory.logger + +import com.infinum.dbinspector.data.models.memory.logger.Level + +internal class EmptyLogger : Logger(Level.NONE) { + + override fun log(level: Level, message: String) = Unit +} diff --git a/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/logger/Logger.kt b/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/logger/Logger.kt new file mode 100644 index 00000000..50dde2ef --- /dev/null +++ b/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/logger/Logger.kt @@ -0,0 +1,39 @@ +package com.infinum.dbinspector.data.sources.memory.logger + +import com.infinum.dbinspector.data.models.memory.logger.Level + +public abstract class Logger( + public var level: Level = Level.INFO +) { + + public companion object { + internal const val DEFAULT_LOG_TAG = "[DbInspector]" + } + + @Suppress("MemberVisibilityCanBePrivate") + public var tag: String? = null + + public abstract fun log(level: Level, message: String) + + public fun debug(message: String) { + doLog(Level.DEBUG, message) + } + + public fun info(message: String) { + doLog(Level.INFO, message) + } + + public fun error(message: String) { + doLog(Level.ERROR, message) + } + + protected fun tag(): String = tag ?: DEFAULT_LOG_TAG + + private fun canLog(level: Level): Boolean = this.level <= level + + private fun doLog(level: Level, message: String) { + if (canLog(level)) { + log(level, message) + } + } +} diff --git a/dbinspector/build.gradle b/dbinspector/build.gradle index 4e63775e..e1341f27 100644 --- a/dbinspector/build.gradle +++ b/dbinspector/build.gradle @@ -42,7 +42,6 @@ android { kotlinOptions { jvmTarget = JavaVersion.VERSION_1_8.toString() freeCompilerArgs += [ - '-Xopt-in=org.koin.core.component.KoinApiExtension', '-Xexplicit-api=strict' ] useIR = true @@ -65,7 +64,6 @@ dependencies { implementation libs.protobuf.javalite implementation libs.material implementation libs.koin - implementation libs.timber implementation libs.fuzzy } diff --git a/dbinspector/proguard-rules.txt b/dbinspector/proguard-rules.txt index 553df38b..57f392bb 100644 --- a/dbinspector/proguard-rules.txt +++ b/dbinspector/proguard-rules.txt @@ -4,6 +4,20 @@ -keep public class com.infinum.dbinspector.DbInspector { public protected *; } +-keep public class com.infinum.dbinspector.data.models.memory.logger.Level { + public protected *; +} + +-keep public class com.infinum.dbinspector.data.sources.memory.logger.Logger { + public protected *; +} + +-keep public class com.infinum.dbinspector.data.sources.memory.logger.EmptyLogger { + public protected *; +} +-keep public class com.infinum.dbinspector.data.sources.memory.logger.AndroidLogger { + public protected *; +} -keep class androidx.datastore.*.* {*;} -keepclassmembers class * extends androidx.datastore.* { ; diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/DbInspector.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/DbInspector.kt index 91b2b6e9..1f7436c8 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/DbInspector.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/DbInspector.kt @@ -1,21 +1,16 @@ package com.infinum.dbinspector import android.content.Intent +import com.infinum.dbinspector.data.sources.memory.logger.EmptyLogger +import com.infinum.dbinspector.data.sources.memory.logger.Logger import com.infinum.dbinspector.ui.Presentation import com.infinum.dbinspector.ui.databases.DatabasesActivity -import timber.log.Timber -import timber.log.Timber.DebugTree public object DbInspector { - init { - if (BuildConfig.DEBUG) { - Timber.plant(DebugTree()) - } - } - @JvmStatic - public fun show(): Unit = + public fun show(logger: Logger = EmptyLogger()) { + Presentation.setLogger(logger) with(Presentation.applicationContext()) { this.startActivity( Intent( @@ -26,4 +21,5 @@ public object DbInspector { } ) } + } } diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/Data.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/Data.kt index 7b1bc088..050515e6 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/Data.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/Data.kt @@ -7,17 +7,17 @@ import com.infinum.dbinspector.data.Data.Constants.Name.PROTO_FILENAME_HISTORY import com.infinum.dbinspector.data.Data.Constants.Name.PROTO_FILENAME_SETTINGS import com.infinum.dbinspector.data.models.local.proto.output.HistoryEntity import com.infinum.dbinspector.data.models.local.proto.output.SettingsEntity -import com.infinum.dbinspector.data.source.local.cursor.PragmaSource -import com.infinum.dbinspector.data.source.local.cursor.RawQuerySource -import com.infinum.dbinspector.data.source.local.cursor.SchemaSource -import com.infinum.dbinspector.data.source.local.proto.history.HistoryDataStore -import com.infinum.dbinspector.data.source.local.proto.history.HistorySerializer -import com.infinum.dbinspector.data.source.local.proto.settings.SettingsDataStore -import com.infinum.dbinspector.data.source.local.proto.settings.SettingsSerializer -import com.infinum.dbinspector.data.source.memory.connection.AndroidConnectionSource -import com.infinum.dbinspector.data.source.memory.pagination.CursorPaginator -import com.infinum.dbinspector.data.source.memory.pagination.Paginator -import com.infinum.dbinspector.data.source.raw.AndroidDatabasesSource +import com.infinum.dbinspector.data.sources.local.cursor.PragmaSource +import com.infinum.dbinspector.data.sources.local.cursor.RawQuerySource +import com.infinum.dbinspector.data.sources.local.cursor.SchemaSource +import com.infinum.dbinspector.data.sources.local.proto.history.HistoryDataStore +import com.infinum.dbinspector.data.sources.local.proto.history.HistorySerializer +import com.infinum.dbinspector.data.sources.local.proto.settings.SettingsDataStore +import com.infinum.dbinspector.data.sources.local.proto.settings.SettingsSerializer +import com.infinum.dbinspector.data.sources.memory.connection.AndroidConnectionSource +import com.infinum.dbinspector.data.sources.memory.pagination.CursorPaginator +import com.infinum.dbinspector.data.sources.memory.pagination.Paginator +import com.infinum.dbinspector.data.sources.raw.AndroidDatabasesSource import com.infinum.dbinspector.extensions.dataStoreFile import org.koin.core.module.Module import org.koin.core.qualifier.StringQualifier @@ -145,6 +145,7 @@ internal object Data { get(qualifier = Qualifiers.Schema.TRIGGERS), get(qualifier = Qualifiers.Schema.TRIGGER_BY_NAME), get(qualifier = Qualifiers.Schema.DROP_TRIGGER), + get(), get() ) } @@ -154,6 +155,7 @@ internal object Data { get(qualifier = Qualifiers.Pragma.TABLE_INFO), get(qualifier = Qualifiers.Pragma.FOREIGN_KEYS), get(qualifier = Qualifiers.Pragma.INDEXES), + get(), get() ) } @@ -161,6 +163,7 @@ internal object Data { factory { RawQuerySource( get(qualifier = Qualifiers.Schema.RAW_QUERY), + get(), get() ) } diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/models/memory/logger/Level.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/models/memory/logger/Level.kt new file mode 100644 index 00000000..65097e1e --- /dev/null +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/models/memory/logger/Level.kt @@ -0,0 +1,8 @@ +package com.infinum.dbinspector.data.models.memory.logger + +public enum class Level { + DEBUG, + INFO, + ERROR, + NONE +} diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/cursor/PragmaSource.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/cursor/PragmaSource.kt similarity index 90% rename from dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/cursor/PragmaSource.kt rename to dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/cursor/PragmaSource.kt index 303c8b0c..3f7a5486 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/cursor/PragmaSource.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/cursor/PragmaSource.kt @@ -1,4 +1,4 @@ -package com.infinum.dbinspector.data.source.local.cursor +package com.infinum.dbinspector.data.sources.local.cursor import com.infinum.dbinspector.data.Sources import com.infinum.dbinspector.data.models.local.cursor.exceptions.CursorException @@ -8,8 +8,9 @@ import com.infinum.dbinspector.data.models.local.cursor.output.Field import com.infinum.dbinspector.data.models.local.cursor.output.FieldType import com.infinum.dbinspector.data.models.local.cursor.output.QueryResult import com.infinum.dbinspector.data.models.local.cursor.output.Row -import com.infinum.dbinspector.data.source.local.cursor.shared.CursorSource -import com.infinum.dbinspector.data.source.memory.pagination.Paginator +import com.infinum.dbinspector.data.sources.local.cursor.shared.CursorSource +import com.infinum.dbinspector.data.sources.memory.logger.Logger +import com.infinum.dbinspector.data.sources.memory.pagination.Paginator import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException import kotlinx.coroutines.suspendCancellableCoroutine @@ -18,8 +19,9 @@ internal class PragmaSource( private val tableInfoPaginator: Paginator, private val foreignKeysPaginator: Paginator, private val indexesPaginator: Paginator, - private val store: Sources.Local.Settings -) : CursorSource(), Sources.Local.Pragma { + private val store: Sources.Local.Settings, + logger: Logger +) : CursorSource(logger), Sources.Local.Pragma { override suspend fun getUserVersion(query: Query): QueryResult = store.current().let { diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/cursor/RawQuerySource.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/cursor/RawQuerySource.kt similarity index 91% rename from dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/cursor/RawQuerySource.kt rename to dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/cursor/RawQuerySource.kt index b6268be8..dc512ff9 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/cursor/RawQuerySource.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/cursor/RawQuerySource.kt @@ -1,4 +1,4 @@ -package com.infinum.dbinspector.data.source.local.cursor +package com.infinum.dbinspector.data.sources.local.cursor import com.infinum.dbinspector.data.Sources import com.infinum.dbinspector.data.models.local.cursor.exceptions.CursorException @@ -8,16 +8,18 @@ import com.infinum.dbinspector.data.models.local.cursor.output.Field import com.infinum.dbinspector.data.models.local.cursor.output.FieldType import com.infinum.dbinspector.data.models.local.cursor.output.QueryResult import com.infinum.dbinspector.data.models.local.cursor.output.Row -import com.infinum.dbinspector.data.source.local.cursor.shared.CursorSource -import com.infinum.dbinspector.data.source.memory.pagination.Paginator +import com.infinum.dbinspector.data.sources.local.cursor.shared.CursorSource +import com.infinum.dbinspector.data.sources.memory.logger.Logger +import com.infinum.dbinspector.data.sources.memory.pagination.Paginator import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException import kotlinx.coroutines.suspendCancellableCoroutine internal class RawQuerySource( private val rawQueryPaginator: Paginator, - private val store: Sources.Local.Settings -) : CursorSource(), Sources.Local.RawQuery { + private val store: Sources.Local.Settings, + logger: Logger +) : CursorSource(logger), Sources.Local.RawQuery { override suspend fun rawQueryHeaders(query: Query): QueryResult = store.current().let { diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/cursor/SchemaSource.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/cursor/SchemaSource.kt similarity index 92% rename from dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/cursor/SchemaSource.kt rename to dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/cursor/SchemaSource.kt index f4e79170..b314925e 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/cursor/SchemaSource.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/cursor/SchemaSource.kt @@ -1,10 +1,11 @@ -package com.infinum.dbinspector.data.source.local.cursor +package com.infinum.dbinspector.data.sources.local.cursor import com.infinum.dbinspector.data.Sources import com.infinum.dbinspector.data.models.local.cursor.input.Query import com.infinum.dbinspector.data.models.local.cursor.output.QueryResult -import com.infinum.dbinspector.data.source.local.cursor.shared.CursorSource -import com.infinum.dbinspector.data.source.memory.pagination.Paginator +import com.infinum.dbinspector.data.sources.local.cursor.shared.CursorSource +import com.infinum.dbinspector.data.sources.memory.logger.Logger +import com.infinum.dbinspector.data.sources.memory.pagination.Paginator import kotlinx.coroutines.suspendCancellableCoroutine @Suppress("LongParameterList") @@ -18,8 +19,9 @@ internal class SchemaSource( private val triggersPaginator: Paginator, private val triggerByNamePaginator: Paginator, private val dropTriggerPaginator: Paginator, - private val store: Sources.Local.Settings -) : CursorSource(), Sources.Local.Schema { + private val store: Sources.Local.Settings, + logger: Logger +) : CursorSource(logger), Sources.Local.Schema { // region Tables override suspend fun getTables(query: Query): QueryResult = diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/cursor/shared/CursorSource.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/cursor/shared/CursorSource.kt similarity index 94% rename from dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/cursor/shared/CursorSource.kt rename to dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/cursor/shared/CursorSource.kt index 6b3ab136..4fdf2fdc 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/cursor/shared/CursorSource.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/cursor/shared/CursorSource.kt @@ -1,4 +1,4 @@ -package com.infinum.dbinspector.data.source.local.cursor.shared +package com.infinum.dbinspector.data.sources.local.cursor.shared import android.database.Cursor import androidx.core.database.getBlobOrNull @@ -13,14 +13,16 @@ import com.infinum.dbinspector.data.models.local.cursor.output.FieldType import com.infinum.dbinspector.data.models.local.cursor.output.QueryResult import com.infinum.dbinspector.data.models.local.cursor.output.Row import com.infinum.dbinspector.data.models.local.proto.output.SettingsEntity -import com.infinum.dbinspector.data.source.memory.pagination.Paginator +import com.infinum.dbinspector.data.sources.memory.logger.Logger +import com.infinum.dbinspector.data.sources.memory.pagination.Paginator import com.infinum.dbinspector.extensions.lowercase import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException import kotlinx.coroutines.CancellableContinuation -import timber.log.Timber -internal open class CursorSource { +internal open class CursorSource( + private val logger: Logger +) { fun collectRows( query: Query, @@ -67,7 +69,9 @@ internal open class CursorSource { internal fun runQuery(query: Query): Cursor? = query.database?.rawQuery( - query.statement.also { Timber.i(it) }, + query.statement.also { + logger.info(it) + }, null ) diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/proto/history/HistoryDataStore.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/proto/history/HistoryDataStore.kt similarity index 90% rename from dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/proto/history/HistoryDataStore.kt rename to dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/proto/history/HistoryDataStore.kt index 3441934f..e56781b8 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/proto/history/HistoryDataStore.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/proto/history/HistoryDataStore.kt @@ -1,4 +1,4 @@ -package com.infinum.dbinspector.data.source.local.proto.history +package com.infinum.dbinspector.data.sources.local.proto.history import androidx.datastore.core.DataStore import com.infinum.dbinspector.data.Sources diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/proto/history/HistorySerializer.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/proto/history/HistorySerializer.kt similarity index 94% rename from dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/proto/history/HistorySerializer.kt rename to dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/proto/history/HistorySerializer.kt index 303fd831..02c5cd37 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/proto/history/HistorySerializer.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/proto/history/HistorySerializer.kt @@ -1,4 +1,4 @@ -package com.infinum.dbinspector.data.source.local.proto.history +package com.infinum.dbinspector.data.sources.local.proto.history import androidx.datastore.core.CorruptionException import androidx.datastore.core.Serializer diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/proto/settings/SettingsDataStore.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/proto/settings/SettingsDataStore.kt similarity index 90% rename from dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/proto/settings/SettingsDataStore.kt rename to dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/proto/settings/SettingsDataStore.kt index 0f111c11..c11d584a 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/proto/settings/SettingsDataStore.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/proto/settings/SettingsDataStore.kt @@ -1,4 +1,4 @@ -package com.infinum.dbinspector.data.source.local.proto.settings +package com.infinum.dbinspector.data.sources.local.proto.settings import androidx.datastore.core.DataStore import com.infinum.dbinspector.data.Sources diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/proto/settings/SettingsSerializer.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/proto/settings/SettingsSerializer.kt similarity index 94% rename from dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/proto/settings/SettingsSerializer.kt rename to dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/proto/settings/SettingsSerializer.kt index 8916824f..a71c9627 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/local/proto/settings/SettingsSerializer.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/local/proto/settings/SettingsSerializer.kt @@ -1,4 +1,4 @@ -package com.infinum.dbinspector.data.source.local.proto.settings +package com.infinum.dbinspector.data.sources.local.proto.settings import androidx.datastore.core.CorruptionException import androidx.datastore.core.Serializer diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/memory/connection/AndroidConnectionSource.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/connection/AndroidConnectionSource.kt similarity index 93% rename from dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/memory/connection/AndroidConnectionSource.kt rename to dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/connection/AndroidConnectionSource.kt index f606d3c5..35190dd3 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/memory/connection/AndroidConnectionSource.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/connection/AndroidConnectionSource.kt @@ -1,4 +1,4 @@ -package com.infinum.dbinspector.data.source.memory.connection +package com.infinum.dbinspector.data.sources.memory.connection import android.database.sqlite.SQLiteDatabase import com.infinum.dbinspector.data.Sources diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/logger/AndroidLogger.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/logger/AndroidLogger.kt new file mode 100644 index 00000000..5ca49697 --- /dev/null +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/logger/AndroidLogger.kt @@ -0,0 +1,24 @@ +package com.infinum.dbinspector.data.sources.memory.logger + +import android.util.Log +import com.infinum.dbinspector.data.models.memory.logger.Level + +public class AndroidLogger( + level: Level = Level.INFO +) : Logger(level) { + + override fun log(level: Level, message: String) { + if (this.level <= level) { + logOnLevel(message, level) + } + } + + private fun logOnLevel(message: String, level: Level) { + when (level) { + Level.DEBUG -> Log.d(tag(), message) + Level.INFO -> Log.i(tag(), message) + Level.ERROR -> Log.e(tag(), message) + else -> Log.e(tag(), message) + } + } +} diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/logger/EmptyLogger.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/logger/EmptyLogger.kt new file mode 100644 index 00000000..ebe1025c --- /dev/null +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/logger/EmptyLogger.kt @@ -0,0 +1,8 @@ +package com.infinum.dbinspector.data.sources.memory.logger + +import com.infinum.dbinspector.data.models.memory.logger.Level + +internal class EmptyLogger : Logger(Level.NONE) { + + override fun log(level: Level, message: String) = Unit +} diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/logger/Logger.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/logger/Logger.kt new file mode 100644 index 00000000..50dde2ef --- /dev/null +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/logger/Logger.kt @@ -0,0 +1,39 @@ +package com.infinum.dbinspector.data.sources.memory.logger + +import com.infinum.dbinspector.data.models.memory.logger.Level + +public abstract class Logger( + public var level: Level = Level.INFO +) { + + public companion object { + internal const val DEFAULT_LOG_TAG = "[DbInspector]" + } + + @Suppress("MemberVisibilityCanBePrivate") + public var tag: String? = null + + public abstract fun log(level: Level, message: String) + + public fun debug(message: String) { + doLog(Level.DEBUG, message) + } + + public fun info(message: String) { + doLog(Level.INFO, message) + } + + public fun error(message: String) { + doLog(Level.ERROR, message) + } + + protected fun tag(): String = tag ?: DEFAULT_LOG_TAG + + private fun canLog(level: Level): Boolean = this.level <= level + + private fun doLog(level: Level, message: String) { + if (canLog(level)) { + log(level, message) + } + } +} diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/memory/pagination/CursorPaginator.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/pagination/CursorPaginator.kt similarity index 63% rename from dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/memory/pagination/CursorPaginator.kt rename to dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/pagination/CursorPaginator.kt index 0e3c4a07..5494af33 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/memory/pagination/CursorPaginator.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/pagination/CursorPaginator.kt @@ -1,10 +1,9 @@ -package com.infinum.dbinspector.data.source.memory.pagination +package com.infinum.dbinspector.data.sources.memory.pagination import com.infinum.dbinspector.extensions.orZero import kotlin.math.ceil import kotlin.math.min import kotlin.math.roundToInt -import timber.log.Timber internal class CursorPaginator : Paginator { @@ -12,30 +11,22 @@ internal class CursorPaginator : Paginator { override fun setPageCount(rowCount: Int, pageSize: Int) { pageCount = ceil((rowCount.toDouble()) / pageSize.toDouble()).roundToInt() - Timber.i( - "setPageCount -> rowCount/pageSize: ${rowCount.toDouble()}/${pageSize.toDouble()} | pageCount: $pageCount" - ) } override fun nextPage(currentPage: Int?): Int? = if (pageCount == 0) { - Timber.i("nextPage -> no pages | return null") null } else { if (currentPage == pageCount) { - Timber.i("nextPage -> end of pages | return null") null } else { - val nextPage = currentPage?.inc() - Timber.i("nextPage -> next page | return $nextPage") - nextPage + currentPage?.inc() } } override fun boundary(page: Int?, pageSize: Int, rowCount: Int): Paginator.Boundary { val startRow = page?.minus(1)?.times(pageSize).orZero() val endRow = min(startRow + pageSize, rowCount) - Timber.i("boundary -> page/pageCount: $page/$pageCount | startRow - endRow: $startRow - $endRow") return Paginator.Boundary( startRow = startRow, endRow = endRow @@ -45,7 +36,6 @@ internal class CursorPaginator : Paginator { override fun count(startRow: Int, endRow: Int, rowCount: Int, columnCount: Int): Paginator.Count { val beforeCount = startRow * columnCount val afterCount = (rowCount - endRow) * columnCount - Timber.i("count -> startRow->endRow: $startRow->$endRow | beforeCount - afterCount: $beforeCount - $afterCount") return Paginator.Count( beforeCount = beforeCount, afterCount = afterCount diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/memory/pagination/Paginator.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/pagination/Paginator.kt similarity index 87% rename from dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/memory/pagination/Paginator.kt rename to dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/pagination/Paginator.kt index d9c475cb..71ba37b5 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/memory/pagination/Paginator.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/memory/pagination/Paginator.kt @@ -1,4 +1,4 @@ -package com.infinum.dbinspector.data.source.memory.pagination +package com.infinum.dbinspector.data.sources.memory.pagination internal interface Paginator { diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/raw/AndroidDatabasesSource.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/raw/AndroidDatabasesSource.kt similarity index 99% rename from dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/raw/AndroidDatabasesSource.kt rename to dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/raw/AndroidDatabasesSource.kt index 8b2904a0..a1d45bc7 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/source/raw/AndroidDatabasesSource.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/data/sources/raw/AndroidDatabasesSource.kt @@ -1,4 +1,4 @@ -package com.infinum.dbinspector.data.source.raw +package com.infinum.dbinspector.data.sources.raw import com.infinum.dbinspector.R import com.infinum.dbinspector.data.Sources diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/di/LibraryKoin.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/di/LibraryKoin.kt index 42038a07..6b6864a8 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/di/LibraryKoin.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/di/LibraryKoin.kt @@ -2,12 +2,15 @@ package com.infinum.dbinspector.di import android.content.Context import com.infinum.dbinspector.BuildConfig +import com.infinum.dbinspector.data.sources.memory.logger.EmptyLogger +import com.infinum.dbinspector.data.sources.memory.logger.Logger import com.infinum.dbinspector.ui.Presentation import org.koin.android.ext.koin.androidContext import org.koin.android.ext.koin.androidLogger import org.koin.core.Koin import org.koin.core.KoinApplication import org.koin.core.logger.Level +import org.koin.dsl.module internal object LibraryKoin { @@ -21,5 +24,16 @@ internal object LibraryKoin { androidContext(context) modules(Presentation.modules()) } + setLibraryLogger(EmptyLogger()) + } + + fun setLibraryLogger(logger: Logger) { + koin().loadModules( + listOf( + module { + single(override = true) { logger } + } + ) + ) } } diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/Converters.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/Converters.kt index 27aec83e..ff10b2e5 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/Converters.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/Converters.kt @@ -17,7 +17,7 @@ import com.infinum.dbinspector.domain.shared.models.parameters.SortParameters internal interface Converters { - interface Database { + interface Database : BaseConverter { suspend infix fun get(parameters: DatabaseParameters.Get): Operation @@ -32,7 +32,7 @@ internal interface Converters { interface Sort : BaseConverter - interface Pragma { + interface Pragma : BaseConverter { suspend infix fun version(parameters: PragmaParameters.Version): Query @@ -45,7 +45,7 @@ internal interface Converters { interface Truncate : BaseConverter - interface Settings { + interface Settings : BaseConverter { suspend infix fun get(parameters: SettingsParameters.Get): SettingsTask @@ -60,7 +60,7 @@ internal interface Converters { suspend infix fun ignoredTableName(parameters: SettingsParameters.IgnoredTableName): SettingsTask } - interface History { + interface History : BaseConverter { infix fun get(parameters: HistoryParameters.All): HistoryTask diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/history/interactors/GetExecutionInteractor.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/history/interactors/GetExecutionInteractor.kt index a2aeb08b..82ef41c0 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/history/interactors/GetExecutionInteractor.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/history/interactors/GetExecutionInteractor.kt @@ -14,7 +14,8 @@ internal class GetExecutionInteractor( dataStore.current() .executionsList .filter { it.databasePath == input.execution?.databasePath } - .let { entities -> + .takeIf { it.isNotEmpty() } + ?.let { entities -> FuzzySearch.extractOne( input.execution?.execution.orEmpty(), entities.map { it.execution } diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/shared/base/BaseControl.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/shared/base/BaseControl.kt index 6f33bf49..d4ed85c2 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/shared/base/BaseControl.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/shared/base/BaseControl.kt @@ -1,6 +1,6 @@ package com.infinum.dbinspector.domain.shared.base -internal interface BaseControl, Converter> { +internal interface BaseControl, Converter : BaseConverter<*, *>> { val mapper: Mapper diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/Presentation.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/Presentation.kt index 0521339f..57152eb1 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/Presentation.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/Presentation.kt @@ -2,6 +2,8 @@ package com.infinum.dbinspector.ui import android.annotation.SuppressLint import android.content.Context +import com.infinum.dbinspector.data.sources.memory.logger.Logger +import com.infinum.dbinspector.di.LibraryKoin import com.infinum.dbinspector.domain.Domain import com.infinum.dbinspector.ui.content.table.TableViewModel import com.infinum.dbinspector.ui.content.trigger.TriggerViewModel @@ -56,6 +58,10 @@ internal object Presentation { this.context = context } + fun setLogger(logger: Logger) { + LibraryKoin.setLibraryLogger(logger) + } + fun applicationContext(): Context { if (this::context.isInitialized) { return context.applicationContext diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/databases/NavigatorIntentFactory.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/databases/NavigatorIntentFactory.kt index e9f5478a..dc4dc688 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/databases/NavigatorIntentFactory.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/databases/NavigatorIntentFactory.kt @@ -13,7 +13,6 @@ import com.infinum.dbinspector.ui.Presentation import com.infinum.dbinspector.ui.schema.SchemaActivity import com.infinum.dbinspector.ui.settings.SettingsActivity import java.io.File -import timber.log.Timber internal class NavigatorIntentFactory( private val context: Context @@ -53,6 +52,7 @@ internal class NavigatorIntentFactory( context.getString(R.string.dbinspector_action_import) ) + @Suppress("SwallowedException") fun showShare(database: DatabaseDescriptor) = try { (context as? Activity)?.let { @@ -72,7 +72,6 @@ internal class NavigatorIntentFactory( ) } ?: throw NullPointerException() } catch (exception: ActivityNotFoundException) { - Timber.e(exception) Toast.makeText( context, String.format(context.getString(R.string.dbinspector_share_database_failed), database.name), diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/edit/EditViewModel.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/edit/EditViewModel.kt index d62c7fe4..1d557a95 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/edit/EditViewModel.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/edit/EditViewModel.kt @@ -23,7 +23,6 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.launch -import timber.log.Timber @Suppress("LongParameterList") internal class EditViewModel( @@ -41,12 +40,9 @@ internal class EditViewModel( private var debounceSimilarExecutionJob: Job? = null - private var onError: suspend (value: Throwable) -> Unit = { throwable -> - Timber.e(throwable) - } + private var onError: suspend (value: Throwable) -> Unit = { } override val errorHandler = CoroutineExceptionHandler { _, throwable -> - Timber.e(throwable) showError(throwable) } diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/shared/base/BaseViewModel.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/shared/base/BaseViewModel.kt index 09e91928..db76d343 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/shared/base/BaseViewModel.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/shared/base/BaseViewModel.kt @@ -2,6 +2,7 @@ package com.infinum.dbinspector.ui.shared.base import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.infinum.dbinspector.data.sources.memory.logger.Logger import com.infinum.dbinspector.di.LibraryKoinComponent import kotlinx.coroutines.CoroutineExceptionHandler import kotlinx.coroutines.CoroutineScope @@ -10,16 +11,18 @@ import kotlinx.coroutines.SupervisorJob import kotlinx.coroutines.cancel import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import timber.log.Timber +import org.koin.core.component.inject internal abstract class BaseViewModel : ViewModel(), LibraryKoinComponent { + private val logger: Logger by inject() + private val supervisorJob = SupervisorJob() private val dispatchersIo = Dispatchers.IO protected open val errorHandler = CoroutineExceptionHandler { _, throwable -> - Timber.e(throwable) + throwable.message?.let { logger.error(it) } } override fun onCleared() { diff --git a/editor.png b/editor.png new file mode 100644 index 00000000..cb94560e Binary files /dev/null and b/editor.png differ diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ddeedffa..d3d2561f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,25 +1,24 @@ [versions] -dbinspector = "5.2.9" +dbinspector = "5.3.2" gradle = "4.1.3" kotlin = "1.4.32" coroutines = "1.4.3" core = "1.3.2" appcompat = "1.2.0" activity = "1.2.2" -fragment = "1.3.2" +fragment = "1.3.3" lifecycle = "2.3.1" viewpager = "1.0.0" -paging = "3.0.0-beta03" +paging = "3.0.0-rc01" recyclerview = "1.2.0" startup = "1.0.0" swiperefresh = "1.1.0" -datastore = "1.0.0-alpha08" +datastore = "1.0.0-beta01" dynamicanimation = "1.0.0" design = "1.3.0" protobuf-core = "3.15.8" -protobuf-plugin = "0.8.15" -koin = "3.0.1-beta-2" -timber = "4.7.1" +protobuf-plugin = "0.8.16" +koin = "3.0.1" fuzzy = "1.3.1" detekt = "1.16.0" ktlint = "10.0.0" @@ -60,8 +59,6 @@ koin = { module = "io.insert-koin:koin-android", version.ref = "koin" } fuzzy = { module = "me.xdrop:fuzzywuzzy", version.ref = "fuzzy" } -timber = { module = "com.jakewharton.timber:timber", version.ref = "timber" } - detekt-plugin = { module = "io.gitlab.arturbosch.detekt:detekt-gradle-plugin", version.ref = "detekt" } detekt-formatting = { module = "io.gitlab.arturbosch.detekt:detekt-formatting", version.ref = "detekt" } diff --git a/sample/build.gradle b/sample/build.gradle index 0fc72cbf..3b51dfbf 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -34,6 +34,7 @@ android { debug { debuggable true minifyEnabled false + applicationIdSuffix ".debug" } release { debuggable false diff --git a/sample/src/main/kotlin/com/infinum/dbinspector/sample/MainActivity.kt b/sample/src/main/kotlin/com/infinum/dbinspector/sample/MainActivity.kt index f216ae10..2434554d 100644 --- a/sample/src/main/kotlin/com/infinum/dbinspector/sample/MainActivity.kt +++ b/sample/src/main/kotlin/com/infinum/dbinspector/sample/MainActivity.kt @@ -3,6 +3,7 @@ package com.infinum.dbinspector.sample import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import com.infinum.dbinspector.DbInspector +import com.infinum.dbinspector.data.sources.memory.logger.AndroidLogger import com.infinum.dbinspector.sample.databinding.ActivityMainBinding import org.koin.androidx.viewmodel.ext.android.viewModel @@ -13,11 +14,13 @@ class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + supportActionBar?.title = "${supportActionBar?.title?.toString().orEmpty()} (${BuildConfig.BUILD_TYPE})" + ActivityMainBinding.inflate(layoutInflater) .also { setContentView(it.root) } .also { it.show.setOnClickListener { - DbInspector.show() + DbInspector.show(logger = AndroidLogger()) } } diff --git a/screenshots.png b/screenshots.png deleted file mode 100644 index 00604fbe..00000000 Binary files a/screenshots.png and /dev/null differ