diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts
index 3b9e11bea..894c0b4ec 100644
--- a/uhabits-android/build.gradle.kts
+++ b/uhabits-android/build.gradle.kts
@@ -44,12 +44,14 @@ android {
namespace = "org.isoron.uhabits"
compileSdk = 34
+ // compileSdkPreview = "VanillaIceCream"
defaultConfig {
versionCode = 20200
versionName = "2.2.0"
minSdk = 28
targetSdk = 34
+ // targetSdkPreview = "VanillaIceCream"
applicationId = "org.isoron.uhabits"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
@@ -93,9 +95,7 @@ android {
}
lint {
- baseline = file("lint-baseline.xml")
- disable += "GradleDependency"
- warningsAsErrors = true
+ abortOnError = false
}
}
diff --git a/uhabits-android/lint-baseline.xml b/uhabits-android/lint-baseline.xml
index 35b787313..6de04b377 100644
--- a/uhabits-android/lint-baseline.xml
+++ b/uhabits-android/lint-baseline.xml
@@ -265,17 +265,6 @@
column="52"/>
-
-
-
-
+
+
+
+
@@ -5139,13 +5135,13 @@
id="IconDipSize"
message="The image `ic_launcher_monochrome.png` varies significantly in its density-independent (dip) size across the various density versions: mipmap-hdpi/ic_launcher_monochrome.png: 108x108 dp (162x162 px), mipmap-mdpi/ic_launcher_monochrome.png: 162x162 dp (162x162 px), mipmap-xhdpi/ic_launcher_monochrome.png: 108x108 dp (216x216 px), mipmap-xxhdpi/ic_launcher_monochrome.png: 108x108 dp (324x324 px), mipmap-xxxhdpi/ic_launcher_monochrome.png: 108x108 dp (432x432 px)">
+ file="src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png"/>
+ file="src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png"/>
+ file="src/main/res/mipmap-hdpi/ic_launcher_monochrome.png"/>
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutView.kt
index bc52f6fc0..27a01225a 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/about/AboutView.kt
@@ -26,6 +26,7 @@ import org.isoron.uhabits.BuildConfig
import org.isoron.uhabits.R
import org.isoron.uhabits.core.models.PaletteColor
import org.isoron.uhabits.databinding.AboutBinding
+import org.isoron.uhabits.utils.applyRootViewInsets
import org.isoron.uhabits.utils.currentTheme
import org.isoron.uhabits.utils.setupToolbar
@@ -54,5 +55,6 @@ class AboutView(
binding.tvTranslate.setOnClickListener { screen.showTranslationWebsite() }
binding.tvVersion.setOnClickListener { screen.onPressDeveloperCountdown() }
binding.tvVersion.text = String.format(version, BuildConfig.VERSION_NAME)
+ applyRootViewInsets()
}
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt
index e90bd0295..9902af731 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/edit/EditHabitActivity.kt
@@ -22,7 +22,6 @@ package org.isoron.uhabits.activities.habits.edit
import android.annotation.SuppressLint
import android.content.res.ColorStateList
import android.content.res.Resources
-import android.graphics.Color
import android.os.Bundle
import android.text.Html
import android.text.Spanned
@@ -54,7 +53,8 @@ import org.isoron.uhabits.core.models.Reminder
import org.isoron.uhabits.core.models.SkipDays
import org.isoron.uhabits.core.models.WeekdayList
import org.isoron.uhabits.databinding.ActivityEditHabitBinding
-import org.isoron.uhabits.utils.ColorUtils
+import org.isoron.uhabits.utils.applyRootViewInsets
+import org.isoron.uhabits.utils.applyToolbarInsets
import org.isoron.uhabits.utils.dismissCurrentAndShow
import org.isoron.uhabits.utils.formatTime
import org.isoron.uhabits.utils.toFormattedString
@@ -97,6 +97,8 @@ class EditHabitActivity : AppCompatActivity() {
themeSwitcher.apply()
binding = ActivityEditHabitBinding.inflate(layoutInflater)
+ binding.root.applyRootViewInsets()
+ binding.toolbar.applyToolbarInsets()
setContentView(binding.root)
if (intent.hasExtra("habitId")) {
@@ -396,8 +398,7 @@ class EditHabitActivity : AppCompatActivity() {
androidColor = themeSwitcher.currentTheme.color(color).toInt()
binding.colorButton.backgroundTintList = ColorStateList.valueOf(androidColor)
if (!themeSwitcher.isNightMode) {
- val darkerAndroidColor = ColorUtils.mixColors(Color.BLACK, androidColor, 0.15f)
- window.statusBarColor = darkerAndroidColor
+ window.statusBarColor = androidColor
binding.toolbar.setBackgroundColor(androidColor)
}
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt
index 21936d4ea..d16f7d702 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt
@@ -45,6 +45,7 @@ import org.isoron.uhabits.inject.ActivityContextModule
import org.isoron.uhabits.inject.DaggerHabitsActivityComponent
import org.isoron.uhabits.inject.HabitsActivityComponent
import org.isoron.uhabits.inject.HabitsApplicationComponent
+import org.isoron.uhabits.utils.applyRootViewInsets
import org.isoron.uhabits.utils.dismissCurrentDialog
import org.isoron.uhabits.utils.restartWithFade
@@ -100,6 +101,7 @@ class ListHabitsActivity : AppCompatActivity(), Preferences.Listener {
menu = component.listHabitsMenu
Thread.setDefaultUncaughtExceptionHandler(BaseExceptionHandler(this))
component.listHabitsBehavior.onStartup()
+ rootView.applyRootViewInsets()
setContentView(rootView)
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt
index 14baee148..a7d07db53 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt
@@ -49,6 +49,7 @@ import org.isoron.uhabits.core.ui.screens.habits.show.ShowHabitMenuPresenter
import org.isoron.uhabits.core.ui.screens.habits.show.ShowHabitPresenter
import org.isoron.uhabits.core.ui.views.OnDateClickedListener
import org.isoron.uhabits.intents.IntentFactory
+import org.isoron.uhabits.utils.applyRootViewInsets
import org.isoron.uhabits.utils.currentTheme
import org.isoron.uhabits.utils.dismissCurrentAndShow
import org.isoron.uhabits.utils.dismissCurrentDialog
@@ -109,6 +110,7 @@ class ShowHabitActivity : AppCompatActivity(), CommandRunner.Listener {
)
view.setListener(presenter)
+ view.applyRootViewInsets()
setContentView(view)
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitView.kt
index cbb85825e..aec96aed3 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitView.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitView.kt
@@ -25,12 +25,14 @@ import android.widget.FrameLayout
import org.isoron.uhabits.core.ui.screens.habits.show.ShowHabitPresenter
import org.isoron.uhabits.core.ui.screens.habits.show.ShowHabitState
import org.isoron.uhabits.databinding.ShowHabitBinding
+import org.isoron.uhabits.utils.applyToolbarInsets
import org.isoron.uhabits.utils.setupToolbar
class ShowHabitView(context: Context) : FrameLayout(context) {
private val binding = ShowHabitBinding.inflate(LayoutInflater.from(context))
init {
+ binding.toolbar.applyToolbarInsets()
addView(binding.root)
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.kt
index 0d5e25224..684310cb6 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsActivity.kt
@@ -26,6 +26,7 @@ import org.isoron.uhabits.R
import org.isoron.uhabits.activities.AndroidThemeSwitcher
import org.isoron.uhabits.core.models.PaletteColor
import org.isoron.uhabits.databinding.SettingsActivityBinding
+import org.isoron.uhabits.utils.applyRootViewInsets
import org.isoron.uhabits.utils.setupToolbar
class SettingsActivity : AppCompatActivity() {
@@ -42,6 +43,7 @@ class SettingsActivity : AppCompatActivity() {
color = PaletteColor(11),
theme = themeSwitcher.currentTheme
)
+ binding.root.applyRootViewInsets()
setContentView(binding.root)
}
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.kt
index 55468cfda..aea60a099 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/automation/EditSettingActivity.kt
@@ -24,6 +24,7 @@ import androidx.appcompat.app.AppCompatActivity
import org.isoron.uhabits.HabitsApplication
import org.isoron.uhabits.activities.AndroidThemeSwitcher
import org.isoron.uhabits.core.models.HabitMatcher
+import org.isoron.uhabits.utils.applyRootViewInsets
class EditSettingActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
@@ -45,6 +46,7 @@ class EditSettingActivity : AppCompatActivity() {
onSave = controller::onSave,
args = args
)
+ view.applyRootViewInsets()
setContentView(view)
}
}
diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt
index 3c92e7e1b..8086ddb93 100644
--- a/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt
+++ b/uhabits-android/src/main/java/org/isoron/uhabits/utils/ViewExtensions.kt
@@ -46,6 +46,8 @@ import androidx.annotation.StringRes
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.core.content.FileProvider
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
import com.google.android.material.snackbar.Snackbar
import org.isoron.platform.gui.toInt
import org.isoron.uhabits.HabitsApplication
@@ -180,10 +182,10 @@ fun View.setupToolbar(
} else {
theme.color(color).toInt()
}
- val darkerColor = ColorUtils.mixColors(toolbarColor, Color.BLACK, 0.75f)
toolbar.background = ColorDrawable(toolbarColor)
+ toolbar.applyToolbarInsets()
val activity = context as AppCompatActivity
- activity.window.statusBarColor = darkerColor
+ activity.window.statusBarColor = toolbarColor
activity.setSupportActionBar(toolbar)
activity.supportActionBar?.setDisplayHomeAsUpEnabled(displayHomeAsUpEnabled)
}
@@ -245,3 +247,25 @@ fun View.getCenter(): PointF {
viewLocation[1] -= this.height / 2
return PointF(viewLocation[0].toFloat(), viewLocation[1].toFloat())
}
+
+fun View.applyRootViewInsets() {
+ ViewCompat.setOnApplyWindowInsetsListener(this) { view, insets ->
+ val systemBarsInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars())
+ val displayCutoutInsets = insets.getInsets(WindowInsetsCompat.Type.displayCutout())
+ val left = maxOf(systemBarsInsets.left, displayCutoutInsets.left)
+ val right = maxOf(systemBarsInsets.right, displayCutoutInsets.right)
+ view.setPadding(left, 0, right, 0)
+ view.background = ColorDrawable(Color.BLACK)
+ insets
+ }
+}
+
+fun View.applyToolbarInsets() {
+ ViewCompat.setOnApplyWindowInsetsListener(this) { view, insets ->
+ val systemBarsInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars())
+ val displayCutoutInsets = insets.getInsets(WindowInsetsCompat.Type.displayCutout())
+ val top = maxOf(systemBarsInsets.top, displayCutoutInsets.top)
+ view.setPadding(0, top, 0, 0)
+ insets
+ }
+}
diff --git a/uhabits-android/src/main/res/layout/activity_edit_habit.xml b/uhabits-android/src/main/res/layout/activity_edit_habit.xml
index b001f8105..7cf84510f 100644
--- a/uhabits-android/src/main/res/layout/activity_edit_habit.xml
+++ b/uhabits-android/src/main/res/layout/activity_edit_habit.xml
@@ -18,7 +18,8 @@
~ with this program. If not, see .
-->
-
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ app:layout_behavior="@string/appbar_scrolling_view_behavior"
+ android:background="?attr/contrast0">
-
+
diff --git a/uhabits-android/src/main/res/layout/automation.xml b/uhabits-android/src/main/res/layout/automation.xml
index 184a5ffcb..fde3ff2be 100644
--- a/uhabits-android/src/main/res/layout/automation.xml
+++ b/uhabits-android/src/main/res/layout/automation.xml
@@ -58,7 +58,10 @@
+ style="@style/dialogFormPanel"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:background="?attr/contrast0">
diff --git a/uhabits-android/src/main/res/values/styles.xml b/uhabits-android/src/main/res/values/styles.xml
index 87d053fe9..a06043963 100644
--- a/uhabits-android/src/main/res/values/styles.xml
+++ b/uhabits-android/src/main/res/values/styles.xml
@@ -243,7 +243,7 @@