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 @@