diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 38825c75..032c119e 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -56,47 +56,9 @@ jobs: - name: Stop Gradle run: ./gradlew --stop - ktlint: - name: ktlint - needs: [ validation ] - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v6 - - name: Save Gradle Caches - uses: actions/cache@v4 - with: - path: ~/.gradle/caches/ - key: gradle-caches-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - gradle-caches-${{ runner.os }}- - - name: ktlint - run: ./gradlew ktlintAll - - name: Stop Gradle - run: ./gradlew --stop - - cpd: - name: CPD - needs: [ validation ] - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v6 - - name: Save Gradle Caches - uses: actions/cache@v4 - with: - path: ~/.gradle/caches/ - key: gradle-caches-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - gradle-caches-${{ runner.os }}- - - name: CPD - run: ./gradlew cpdAll - - name: Stop Gradle - run: ./gradlew --stop - tests: name: Tests - needs: [ validation, lint, detekt, ktlint, cpd ] + needs: [ validation, lint, detekt ] runs-on: ubuntu-latest steps: - name: Checkout diff --git a/CHANGELOG.md b/CHANGELOG.md index 8302e977..95ba84c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,17 @@ Changelog ========= +## Version 6.0.0 + +_2026-02-09_ + +* minSdk bumped to 24 +* Compile with SDK 36 +* Update Kotlin to 2.2.21. +* Update dependencies to stable version. +* Fix edge-to-edge +* Fix edge case no-op DatabasesActivity crash + ## Version 5.4.9 _2022-10-21_ diff --git a/README.md b/README.md index fe6c8c33..e11a8632 100644 --- a/README.md +++ b/README.md @@ -60,13 +60,13 @@ Then add the following dependencies in your app `build.gradle` or `build.gradle. **Groovy** ```groovy -debugImplementation "com.infinum.dbinspector:dbinspector:5.4.9" -releaseImplementation "com.infinum.dbinspector:dbinspector-no-op:5.4.9" +debugImplementation "com.infinum.dbinspector:dbinspector:6.0.0" +releaseImplementation "com.infinum.dbinspector:dbinspector-no-op:6.0.0" ``` **KotlinDSL** ```kotlin -debugImplementation("com.infinum.dbinspector:dbinspector:5.4.9") -releaseImplementation("com.infinum.dbinspector:dbinspector-no-op:5.4.9") +debugImplementation("com.infinum.dbinspector:dbinspector:6.0.0") +releaseImplementation("com.infinum.dbinspector:dbinspector-no-op:6.0.0") ``` ## Usage diff --git a/build.gradle b/build.gradle index bf43ea73..9e182c76 100644 --- a/build.gradle +++ b/build.gradle @@ -11,9 +11,7 @@ buildscript { dependencies { classpath libs.tools.gradle classpath libs.kotlin.gradle - classpath libs.cpd classpath libs.detekt.gradle - classpath libs.ktlint classpath libs.dokka classpath libs.protobuf.gradle classpath libs.kover @@ -29,9 +27,7 @@ allprojects { } subprojects { - apply from: "$rootDir/cpd.gradle" apply from: "$rootDir/detekt.gradle" - apply from: "$rootDir/ktlint.gradle" apply from: "$rootDir/dokka.gradle" } @@ -57,27 +53,9 @@ task detektAll(dependsOn: [ description = "Run Detekt on all modules" } -task ktlintAll(dependsOn: [ - ':dbinspector:ktlintCheck', - ':dbinspector-no-op:ktlintCheck' -]) { - group = "Verification" - description = "Run Ktlint on all modules" -} - -task cpdAll(dependsOn: [ - ':dbinspector:cpdCheck', - ':dbinspector-no-op:cpdCheck' -]) { - group = "Verification" - description = "Run CPD on all modules" -} - task runStaticChecks(dependsOn: [ ':lintAll', - ':detektAll', - ':ktlintAll', - ':cpdAll' + ':detektAll' ]) { group = "Verification" description = "Run static checks on all modules" diff --git a/buildSrc/src/main/groovy/com/infinum/maven/GithubConfiguration.groovy b/buildSrc/src/main/groovy/com/infinum/maven/GithubConfiguration.groovy deleted file mode 100644 index f569f743..00000000 --- a/buildSrc/src/main/groovy/com/infinum/maven/GithubConfiguration.groovy +++ /dev/null @@ -1,41 +0,0 @@ -package com.infinum.maven - -import com.infinum.maven.shared.BaseConfiguration - -class GithubConfiguration implements BaseConfiguration { - - private Properties properties = new Properties() - - @Override - void load() { - File file = new File("publish.properties") - if (file.exists()) { - properties.load(new FileInputStream(file)) - } else { - properties.setProperty("github.name", "") - properties.setProperty("github.url", "") - properties.setProperty("github.user", "") - properties.setProperty("github.token", "") - } - } - - @Override - String name() { - return properties.getProperty("github.name").toString() - } - - @Override - String url() { - return properties.getProperty("github.url").toString() - } - - @Override - String username() { - return properties.getProperty("github.user").toString() - } - - @Override - String password() { - return properties.getProperty("github.token").toString() - } -} \ No newline at end of file diff --git a/config.gradle b/config.gradle index 9d2cb3ca..eb888483 100644 --- a/config.gradle +++ b/config.gradle @@ -1,13 +1,13 @@ ext { - def major = 5 - def minor = 4 - def patch = 9 + def major = 6 + def minor = 0 + def patch = 0 buildConfig = [ - "minSdk" : 21, - "compileSdk": 33, - "targetSdk" : 33, - "buildTools": "33.0.0" + "minSdk" : 24, + "compileSdk": 36, + "targetSdk" : 36, + "buildTools": "35.0.0" ] releaseConfig = [ "group" : "com.infinum.dbinspector", diff --git a/cpd.gradle b/cpd.gradle deleted file mode 100644 index aa9c4fa9..00000000 --- a/cpd.gradle +++ /dev/null @@ -1,12 +0,0 @@ -apply plugin: "cpd" - -cpd { - language = 'kotlin' -} - -cpdCheck { - reports { - xml.enabled = true - } - source = allprojects*.file("src/main/kotlin") -} diff --git a/dbinspector-no-op/build.gradle b/dbinspector-no-op/build.gradle index 5aa5b004..b7917ce6 100644 --- a/dbinspector-no-op/build.gradle +++ b/dbinspector-no-op/build.gradle @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + plugins { id "com.android.library" id "kotlin-android" @@ -10,18 +12,15 @@ android { defaultConfig { minSdkVersion buildConfig.minSdk targetSdkVersion buildConfig.targetSdk - versionCode releaseConfig.versionCode - versionName releaseConfig.version } buildTypes { debug { - testCoverageEnabled true - debuggable true minifyEnabled false + enableUnitTestCoverage true + enableAndroidTestCoverage true } release { - debuggable false minifyEnabled true proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.txt" } @@ -31,16 +30,19 @@ android { resourcePrefix "dbinspector_" compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8.toString() - freeCompilerArgs += [ - '-Xexplicit-api=strict', - '-Xjvm-default=all' - ] + kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) + freeCompilerArgs.addAll([ + '-Xexplicit-api=strict', + '-Xjvm-default=all', + '-Xannotation-default-target=param-property' + ]) + } } sourceSets.each { diff --git a/dbinspector-no-op/publish.gradle b/dbinspector-no-op/publish.gradle index 132cb156..e93303bd 100644 --- a/dbinspector-no-op/publish.gradle +++ b/dbinspector-no-op/publish.gradle @@ -6,9 +6,9 @@ task sourcesJar(type: Jar) { from android.sourceSets.main.kotlin.srcDirs } -task javadocsJar(type: Jar, dependsOn: "dokkaJavadoc") { - archiveClassifier.set("javadoc") - from dokkaJavadoc.outputDirectory +task javadocsJar(type: Jar, dependsOn: "dokkaGenerate") { + getArchiveClassifier().set("javadoc") + from layout.buildDirectory.dir("javadoc") } afterEvaluate { @@ -22,14 +22,6 @@ afterEvaluate { password sonatype.password() } } - maven { - name github.name() - url github.url() - credentials { - username github.username() - password github.password() - } - } } publications { release(MavenPublication) { @@ -52,15 +44,15 @@ afterEvaluate { url = "https://github.com/infinum/android_dbinspector/blob/master/LICENSE" } } + organization { + name = 'Infinum Inc.' + url = 'https://infinum.com' + } developers { developer { - id = "reisub" - name = "Dino Kovač" - } - developer { - id = "knobtviker" - name = "Bojan Komljenović" - email = "bojan.komljenovic@infinum.com" + id = 'Infinum' + name = 'Infinum Inc.' + url = 'https://infinum.com' } } scm { diff --git a/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/ui/databases/DatabasesActivity.kt b/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/ui/databases/DatabasesActivity.kt index c61639b4..a90073d2 100644 --- a/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/ui/databases/DatabasesActivity.kt +++ b/dbinspector-no-op/src/main/kotlin/com/infinum/dbinspector/ui/databases/DatabasesActivity.kt @@ -1,5 +1,12 @@ package com.infinum.dbinspector.ui.databases import android.app.Activity +import android.os.Bundle -internal class DatabasesActivity : Activity() +internal class DatabasesActivity : Activity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + finish() + } +} diff --git a/dbinspector/build.gradle b/dbinspector/build.gradle index 4f373177..5dae4e9a 100644 --- a/dbinspector/build.gradle +++ b/dbinspector/build.gradle @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + plugins { id "com.android.library" id "kotlin-android" @@ -13,18 +15,15 @@ android { defaultConfig { minSdkVersion buildConfig.minSdk targetSdkVersion buildConfig.targetSdk - versionCode releaseConfig.versionCode - versionName releaseConfig.version } buildTypes { debug { - testCoverageEnabled true - debuggable true minifyEnabled false + enableUnitTestCoverage true + enableAndroidTestCoverage true } release { - debuggable false minifyEnabled true proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.txt" } @@ -38,22 +37,33 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8.toString() - freeCompilerArgs += [ - '-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi', - '-Xexplicit-api=strict', - '-Xjvm-default=all' - ] + kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) + freeCompilerArgs.addAll([ + '-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi', + '-Xexplicit-api=strict', + '-Xjvm-default=all', + '-Xannotation-default-target=param-property' + ]) + } } testOptions { unitTests.returnDefaultValues = true unitTests.all { + testLogging { + events "passed", "skipped", "failed", "standardOut", "standardError" + exceptionFormat "full" + showExceptions true + showCauses true + showStackTraces true + } + kover { enabled = name == "testDebugUnitTest" includes = [ @@ -91,6 +101,7 @@ android { } buildFeatures { + buildConfig = true viewBinding true } diff --git a/dbinspector/publish.gradle b/dbinspector/publish.gradle index 0ff3e9da..62d73601 100644 --- a/dbinspector/publish.gradle +++ b/dbinspector/publish.gradle @@ -6,9 +6,9 @@ task sourcesJar(type: Jar) { from android.sourceSets.main.kotlin.srcDirs } -task javadocsJar(type: Jar, dependsOn: "dokkaJavadoc") { - archiveClassifier.set("javadoc") - from dokkaJavadoc.outputDirectory +task javadocsJar(type: Jar, dependsOn: "dokkaGenerate") { + getArchiveClassifier().set("javadoc") + from layout.buildDirectory.dir("javadoc") } afterEvaluate { @@ -22,14 +22,6 @@ afterEvaluate { password sonatype.password() } } - maven { - name github.name() - url github.url() - credentials { - username github.username() - password github.password() - } - } } publications { release(MavenPublication) { @@ -52,15 +44,15 @@ afterEvaluate { url = "https://github.com/infinum/android_dbinspector/blob/master/LICENSE" } } + organization { + name = 'Infinum Inc.' + url = 'https://infinum.com' + } developers { developer { - id = "reisub" - name = "Dino Kovač" - } - developer { - id = "knobtviker" - name = "Bojan Komljenović" - email = "bojan.komljenovic@infinum.com" + id = 'Infinum' + name = 'Infinum Inc.' + url = 'https://infinum.com' } } scm { diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/shared/models/dsl/Select.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/shared/models/dsl/Select.kt index 36c11c04..7182f90b 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/shared/models/dsl/Select.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/shared/models/dsl/Select.kt @@ -35,9 +35,7 @@ internal class Select { fun orderBy(sort: Sort, vararg columns: String?) { this.orderByDirection = sort - if (columns.isEmpty()) { - throw IllegalArgumentException("At least one column should be defined") - } + require(columns.isNotEmpty()) { "At least one column should be defined" } if (this.orderByColumns.isNotEmpty()) { error("Detected an attempt to re-define ORDER BY columns.") } diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/shared/models/dsl/conditions/Eq.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/shared/models/dsl/conditions/Eq.kt index 9a047327..3644580b 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/shared/models/dsl/conditions/Eq.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/shared/models/dsl/conditions/Eq.kt @@ -8,8 +8,8 @@ internal class Eq( ) : Condition() { init { - if (value != null && value !is Number && value !is String) { - throw IllegalArgumentException("Only null, number and string values can be used in the 'WHERE' clause") + require(value == null || value is Number || value is String) { + "Only null, number and string values can be used in the 'WHERE' clause" } } diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/shared/models/dsl/conditions/Like.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/shared/models/dsl/conditions/Like.kt index 1289aaf8..dd239b2e 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/shared/models/dsl/conditions/Like.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/domain/shared/models/dsl/conditions/Like.kt @@ -8,10 +8,8 @@ internal class Like( ) : Condition() { init { - val isNotNumber = value !is Number - val isNotString = value !is String - if (isNotNumber && isNotString) { - throw IllegalArgumentException("Only number and string values can be used in the 'LIKE' condition") + require(value is Number || value is String) { + "Only number and string values can be used in the 'LIKE' condition" } } diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/extensions/ByteArray.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/extensions/ByteArray.kt index 766b1507..504347b1 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/extensions/ByteArray.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/extensions/ByteArray.kt @@ -26,7 +26,7 @@ internal fun ByteArray.toHexString(): String { return buffer.toString() } -@Suppress("MagicNumber") +@Suppress("MagicNumber", "UnusedPrivateProperty") internal fun ByteArray.toBase64String(): String { val table = (CharRange('A', 'Z') + CharRange('a', 'z') + CharRange('0', '9') + '+' + '/').toCharArray() val output = ByteArrayOutputStream() @@ -36,14 +36,14 @@ internal fun ByteArray.toBase64String(): String { var b = this[position].toInt() and 0xFF shl 16 and 0xFFFFFF if (position + 1 < this.size) b = b or (this[position + 1].toInt() and 0xFF shl 8) else padding++ if (position + 2 < this.size) b = b or (this[position + 2].toInt() and 0xFF) else padding++ - (0 until 4 - padding).forEach { _ -> + for (i in 0 until 4 - padding) { val c = b and 0xFC0000 shr 18 output.write(table[c].code) b = b shl 6 } position += 3 } - (0 until padding).forEach { _ -> + for (i in 0 until padding) { output.write('='.code) } return String(output.toByteArray()) 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 eefa251e..0f0b1340 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/Presentation.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/Presentation.kt @@ -22,7 +22,7 @@ import com.infinum.dbinspector.ui.schema.tables.TablesViewModel import com.infinum.dbinspector.ui.schema.triggers.TriggersViewModel import com.infinum.dbinspector.ui.schema.views.ViewsViewModel import com.infinum.dbinspector.ui.settings.SettingsViewModel -import org.koin.androidx.viewmodel.dsl.viewModel +import org.koin.core.module.dsl.viewModel import org.koin.core.module.Module import org.koin.dsl.module diff --git a/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/shared/base/BaseActivity.kt b/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/shared/base/BaseActivity.kt index ee3d691e..50c9b01e 100644 --- a/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/shared/base/BaseActivity.kt +++ b/dbinspector/src/main/kotlin/com/infinum/dbinspector/ui/shared/base/BaseActivity.kt @@ -1,6 +1,7 @@ package com.infinum.dbinspector.ui.shared.base import android.os.Bundle +import androidx.activity.enableEdgeToEdge import androidx.annotation.CallSuper import androidx.annotation.RestrictTo import androidx.appcompat.app.AppCompatActivity @@ -16,6 +17,7 @@ internal abstract class BaseActivity : AppCompatActivity(), BaseVi @CallSuper override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge() super.onCreate(savedInstanceState) WindowInsetsControllerCompat(window, window.decorView).isAppearanceLightStatusBars = false diff --git a/dbinspector/src/main/res/layout/dbinspector_activity_content.xml b/dbinspector/src/main/res/layout/dbinspector_activity_content.xml index 2b254a66..671442fb 100644 --- a/dbinspector/src/main/res/layout/dbinspector_activity_content.xml +++ b/dbinspector/src/main/res/layout/dbinspector_activity_content.xml @@ -1,7 +1,8 @@ + android:layout_height="match_parent" + android:fitsSystemWindows="true"> + android:layout_height="match_parent" + android:fitsSystemWindows="true"> + android:layout_height="match_parent" + android:fitsSystemWindows="true"> + android:layout_height="match_parent" + android:fitsSystemWindows="true"> + android:layout_height="match_parent" + android:fitsSystemWindows="true"> - def constructor = GithubConfiguration.class.getConstructor() - def instance = constructor.newInstance() - instance.load() - instance -} SonatypeConfiguration.metaClass.constructor = { -> def constructor = SonatypeConfiguration.class.getConstructor() @@ -16,6 +9,5 @@ SonatypeConfiguration.metaClass.constructor = { -> } ext { - github = new GithubConfiguration() sonatype = new SonatypeConfiguration() } \ No newline at end of file diff --git a/sample/build.gradle b/sample/build.gradle index 6c48b2cf..3a99b0b7 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + plugins { id "com.android.application" id "kotlin-android" @@ -28,8 +30,8 @@ android { } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } buildTypes { @@ -47,15 +49,17 @@ android { } buildFeatures { + buildConfig = true viewBinding = true } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_1_8.toString() + kotlin { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) + freeCompilerArgs.addAll([ + '-Xannotation-default-target=param-property' + ]) + } } sourceSets.forEach { @@ -71,6 +75,8 @@ dependencies { implementation libs.material implementation libs.koin.android - debugImplementation libs.library - releaseImplementation libs.librarynoop + debugImplementation project(":dbinspector") + releaseImplementation project(":dbinspector-no-op") + //debugImplementation libs.library + //releaseImplementation libs.librarynoop } \ No newline at end of file diff --git a/sample/src/main/kotlin/com/infinum/dbinspector/sample/DbSampleApp.kt b/sample/src/main/kotlin/com/infinum/dbinspector/sample/DbSampleApp.kt index 0523e123..f01e5494 100644 --- a/sample/src/main/kotlin/com/infinum/dbinspector/sample/DbSampleApp.kt +++ b/sample/src/main/kotlin/com/infinum/dbinspector/sample/DbSampleApp.kt @@ -5,7 +5,7 @@ import com.infinum.dbinspector.sample.data.AssetsDatabaseProvider import com.infinum.dbinspector.sample.data.DatabaseProvider import org.koin.android.ext.koin.androidContext import org.koin.android.ext.koin.androidLogger -import org.koin.androidx.viewmodel.dsl.viewModel +import org.koin.core.module.dsl.viewModel import org.koin.core.context.startKoin import org.koin.core.logger.Level import org.koin.dsl.module 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 07a4a99b..b9077bdd 100644 --- a/sample/src/main/kotlin/com/infinum/dbinspector/sample/MainActivity.kt +++ b/sample/src/main/kotlin/com/infinum/dbinspector/sample/MainActivity.kt @@ -1,6 +1,7 @@ package com.infinum.dbinspector.sample import android.os.Bundle +import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import com.infinum.dbinspector.logger.AndroidLogger import com.infinum.dbinspector.DbInspector @@ -12,6 +13,7 @@ class MainActivity : AppCompatActivity() { private val viewModel: MainViewModel by viewModel() override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge() super.onCreate(savedInstanceState) supportActionBar?.title = diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml index 98839eb3..685abd4f 100644 --- a/sample/src/main/res/layout/activity_main.xml +++ b/sample/src/main/res/layout/activity_main.xml @@ -2,6 +2,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:fitsSystemWindows="true" tools:context="com.infinum.dbinspector.sample.MainActivity">