diff --git a/app/build.gradle b/app/build.gradle index e7f2ce4..c9e994b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,12 +4,12 @@ plugins { } android { - compileSdk 34 + compileSdk 35 defaultConfig { applicationId "com.telefonica.androidlogger.app" minSdkVersion 21 - targetSdkVersion 34 + targetSdkVersion 35 versionCode 1 versionName "1.0.0" @@ -32,6 +32,7 @@ android { } dependencies { + implementation libs.androidx.activity implementation libs.androidx.appcompat implementation project(':library') } diff --git a/app/src/main/java/com/telefonica/androidlogger/app/MainActivity.kt b/app/src/main/java/com/telefonica/androidlogger/app/MainActivity.kt index 5b91732..9ca4444 100644 --- a/app/src/main/java/com/telefonica/androidlogger/app/MainActivity.kt +++ b/app/src/main/java/com/telefonica/androidlogger/app/MainActivity.kt @@ -3,6 +3,7 @@ package com.telefonica.androidlogger.app import android.os.Bundle import android.util.Log import android.widget.Button +import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import com.telefonica.androidlogger.domain.LogPriority import com.telefonica.androidlogger.domain.log @@ -13,6 +14,7 @@ import kotlin.random.nextInt class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge() super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) setupViews() diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fd6d9f2..aca56ce 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,13 +1,15 @@ [versions] -android-gradle-plugin = "8.7.2" +activity = "1.10.1" +android-gradle-plugin = "8.7.3" junit = "4.13.2" -kotlin = "1.9.21" +kotlin = "2.1.10" androidx-lifecycle = "2.2.0" -material = "1.9.0" +material = "1.12.0" elviswhew-xlog = "1.11.1" okio = "3.9.1" [libraries] +androidx-activity = { module = "androidx.activity:activity", version.ref = "activity" } androidx-annotation = { module = "androidx.annotation:annotation", version = "1.9.1" } androidx-appcompat = { module = "androidx.appcompat:appcompat", version = "1.7.0" } androidx-lifecycle-extensions = { module = "androidx.lifecycle:lifecycle-extensions", version.ref = "androidx-lifecycle" } diff --git a/library/build.gradle b/library/build.gradle index 495b93c..7a161bd 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -4,11 +4,11 @@ plugins{ } android { - compileSdk 34 + compileSdk 35 defaultConfig { minSdkVersion 21 - targetSdkVersion 34 + targetSdkVersion 35 } flavorDimensions "loggerMode" @@ -37,6 +37,7 @@ android { dependencies { //noinspection GradleDependency implementation libs.org.jetbrains.kotlin + implementation libs.androidx.activity implementation libs.androidx.annotation enabledImplementation libs.com.google.android.material enabledImplementation libs.androidx.lifecycle.extensions diff --git a/library/src/enabled/java/com/telefonica/androidlogger/ui/AppLoggerActivity.kt b/library/src/enabled/java/com/telefonica/androidlogger/ui/AppLoggerActivity.kt index daa718d..618ca90 100644 --- a/library/src/enabled/java/com/telefonica/androidlogger/ui/AppLoggerActivity.kt +++ b/library/src/enabled/java/com/telefonica/androidlogger/ui/AppLoggerActivity.kt @@ -18,10 +18,16 @@ import android.view.ViewGroup import android.widget.CompoundButton import android.widget.TextView import android.widget.Toast +import androidx.activity.SystemBarStyle +import androidx.activity.enableEdgeToEdge import androidx.annotation.AttrRes import androidx.annotation.ColorInt import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.SearchView +import androidx.core.view.ViewCompat.setOnApplyWindowInsetsListener +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.isVisible +import androidx.core.view.updatePadding import androidx.lifecycle.Observer import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.DefaultItemAnimator @@ -56,6 +62,10 @@ class AppLoggerActivity : AppCompatActivity() { private var shareAllLogsCallback: TaskCallback? = null override fun onCreate(savedInstanceState: Bundle?) { + enableEdgeToEdge( + statusBarStyle = SystemBarStyle.dark(android.graphics.Color.TRANSPARENT), + navigationBarStyle = SystemBarStyle.dark(android.graphics.Color.TRANSPARENT), + ) super.onCreate(savedInstanceState) setContentView(R.layout.activity_app_logger) @@ -69,6 +79,8 @@ class AppLoggerActivity : AppCompatActivity() { initToolbar() initLogsList() initFiltersView() + setOnBackPressed() + setWindowsInsets() viewModel.getFilteredLogs().observe(this@AppLoggerActivity, Observer { adapter.onDataModified(it) @@ -76,6 +88,7 @@ class AppLoggerActivity : AppCompatActivity() { recyclerView.post { scrollToBottom() } } }) + } override fun onCreateOptionsMenu(menu: Menu): Boolean { @@ -129,14 +142,18 @@ class AppLoggerActivity : AppCompatActivity() { else -> super.onOptionsItemSelected(item) } - override fun onBackPressed() { - searchView?.let { - if (!it.isIconified) { - it.isIconified = true - return + private fun setOnBackPressed() { + onBackPressedDispatcher.addCallback(this, object : androidx.activity.OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + searchView?.let { + if (!it.isIconified) { + it.isIconified = true + return + } + } + finish() } - } - super.onBackPressed() + }) } override fun onDestroy() { @@ -275,7 +292,7 @@ class AppLoggerActivity : AppCompatActivity() { } private fun toggleCategoryFilter() { - if (filtersView.visibility == View.VISIBLE) { + if (filtersView.isVisible) { filtersView.visibility = View.GONE } else { filtersView.visibility = View.VISIBLE @@ -325,8 +342,25 @@ class AppLoggerActivity : AppCompatActivity() { }, null) startActivity(shareIntent) } + + private fun setWindowsInsets() { + setOnApplyWindowInsetsListener(recyclerView) { v, windowInsets -> + val bars = windowInsets.getInsets( + WindowInsetsCompat.Type.systemBars() + or WindowInsetsCompat.Type.displayCutout() + ) + v.updatePadding( + top = v.paddingTop, + left = bars.left, + right = bars.right, + bottom = bars.bottom, + ) + WindowInsetsCompat.CONSUMED + } + } } + private const val EXTRA_CATEGORIES_NAMES = "extra_categories_names" @JvmOverloads diff --git a/library/src/enabled/java/com/telefonica/androidlogger/ui/livedata/FilterableLiveData.kt b/library/src/enabled/java/com/telefonica/androidlogger/ui/livedata/FilterableLiveData.kt index b01591c..55794d2 100644 --- a/library/src/enabled/java/com/telefonica/androidlogger/ui/livedata/FilterableLiveData.kt +++ b/library/src/enabled/java/com/telefonica/androidlogger/ui/livedata/FilterableLiveData.kt @@ -4,7 +4,7 @@ import android.os.Handler import android.os.Looper import androidx.lifecycle.LiveData import androidx.lifecycle.MediatorLiveData -import androidx.lifecycle.Transformations +import androidx.lifecycle.map internal class FilterableLiveData( source: LiveData, @@ -62,5 +62,4 @@ internal fun LiveData.throttle(duration: Long = 1000L): LiveData = Med } } -internal fun LiveData.map(mapFunc: (From) -> To): LiveData = - Transformations.map(this, mapFunc) \ No newline at end of file +internal fun LiveData.map(mapFunc: (From) -> To): LiveData = map(mapFunc) \ No newline at end of file diff --git a/library/src/enabled/res/layout/activity_app_logger.xml b/library/src/enabled/res/layout/activity_app_logger.xml index a67bb01..f4bf525 100644 --- a/library/src/enabled/res/layout/activity_app_logger.xml +++ b/library/src/enabled/res/layout/activity_app_logger.xml @@ -1,22 +1,16 @@ - - - + android:layout_height="wrap_content" + android:fitsSystemWindows="true"> - \ No newline at end of file + + + \ No newline at end of file