diff --git a/.github/renovate.json5 b/.github/renovate.json5 index 51645b7e00..5cef531408 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -6,4 +6,17 @@ labels: [ 'dependencies', ], + packageRules: [ + // Enable auto-merge for minor/patch updates. + { + matchUpdateTypes: [ + 'minor', + 'patch', + ], + automerge: true, + matchPackageNames: [ + '/.*/', + ], + }, + ], } diff --git a/build.gradle b/build.gradle index 5686510a89..77b90f3894 100644 --- a/build.gradle +++ b/build.gradle @@ -507,7 +507,7 @@ spotless { kotlin { target("lawnchair/src/**/*.kt") ktlint("1.8.0").customRuleSets([ - "io.nlopez.compose.rules:ktlint:0.4.28", + "io.nlopez.compose.rules:ktlint:0.5.1", ]).editorConfigOverride([ "ktlint_compose_compositionlocal-allowlist": "disabled", "ktlint_compose_lambda-param-event-trailing": "disabled", diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 39ff89d5d5..1c796cd239 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,14 +14,14 @@ protocVersion = "4.33.1" retrofit = "3.0.0" room = "2.8.4" -activityCompose = "1.12.0" +activityCompose = "1.12.1" airbnbLottie = "6.7.1" androidDesugar = "2.1.5" coil = "2.7.0" -composeBom = "2025.11.01" -compose = "1.9.5" -composeMaterial = "1.9.5" -composeMaterial3 = "1.5.0-alpha07" +composeBom = "2025.12.00" +compose = "1.10.0" +composeMaterial = "1.10.0" +composeMaterial3 = "1.5.0-alpha10" composeMaterialIcons = "1.7.8" constraintlayout = "2.2.1" dagger = "2.57.2" @@ -29,7 +29,7 @@ datastore = "1.2.0" dynamicanimation = "1.1.0" fuzzywuzzy = "1.4.0" googleMaterial = "1.13.0" -graphicsCore = "1.0.3" +graphicsCore = "1.0.4" graphicsPath = "1.0.1" graphicsShapes = "1.1.0" hokoBlur = "1.5.5" diff --git a/src/com/android/launcher3/deviceprofile/HotseatProfile.kt b/src/com/android/launcher3/deviceprofile/HotseatProfile.kt index ba828f53cb..e69de29bb2 100644 --- a/src/com/android/launcher3/deviceprofile/HotseatProfile.kt +++ b/src/com/android/launcher3/deviceprofile/HotseatProfile.kt @@ -1,125 +0,0 @@ -/* - * Copyright (C) 2025 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.launcher3.deviceprofile - -import android.content.Context -import android.content.res.Resources -import androidx.compose.ui.platform.LocalContext -import app.lawnchair.hotseat.HotseatMode -import app.lawnchair.preferences2.PreferenceManager2 -import com.android.launcher3.InvariantDeviceProfile -import com.android.launcher3.R -import com.android.launcher3.responsive.CalculatedHotseatSpec -import com.patrykmichalik.opto.core.firstBlocking - -// Remaining hotseat properties -// int numShownHotseatIcons - updates multiple times -// int hotseatCellHeightPx - updates multiple times -// int mHotseatColumnSpan - updates multiple times -// int mHotseatWidthPx - updates multiple times -// int hotseatBarSizePx - updates multiple times -// int hotseatBarBottomSpacePx - relies on var -// int hotseatQsbSpace - relies on var -// int hotseatQsbWidth - updates multiple times -// int hotseatBorderSpace - updates multiple times - -data class HotseatProfile( - val areNavButtonsInline: Boolean, - val navButtonsLayoutWidthPx: Int, - val inlineNavButtonsEndSpacingPx: Int, - val barEndOffset: Int, - val springLoadedBarTopMarginPx: Int, - val barEdgePaddingPx: Int, - val barWorkspaceSpacePx: Int, - val qsbHeight: Int, - val qsbShadowHeight: Int, - val qsbVisualHeight: Int, - val minIconSpacePx: Int, - val minQsbWidthPx: Int, - val maxIconSpacePx: Int, -) { - - companion object Factory { - fun createHotseatProfile( - deviceProperties: DeviceProperties, - res: Resources, - inv: InvariantDeviceProfile, - isTaskbarPresent: Boolean, - shouldApplyWidePortraitDimens: Boolean, - isVerticalBarLayout: Boolean, - responsiveHotseatSpec: CalculatedHotseatSpec?, - workspacePageIndicatorHeight: Int, - hotseatMode: HotseatMode, - ): HotseatProfile { - val areNavButtonsInline = isTaskbarPresent && !deviceProperties.isGestureMode - var inlineNavButtonsEndSpacingPx = 0 - var navButtonsLayoutWidthPx = 0 - var barEndOffset = 0 - // 3 nav buttons + Spacing between nav buttons - if (areNavButtonsInline && !deviceProperties.isPhone) { - inlineNavButtonsEndSpacingPx = - res.getDimensionPixelSize(inv.inlineNavButtonsEndSpacing) - /* 3 nav buttons + Spacing between nav buttons */ - navButtonsLayoutWidthPx = - 3 * res.getDimensionPixelSize(R.dimen.taskbar_nav_buttons_size) + - 2 * res.getDimensionPixelSize(R.dimen.taskbar_button_space_inbetween) - barEndOffset = navButtonsLayoutWidthPx + inlineNavButtonsEndSpacingPx - } - val springLoadedHotseatBarTopMarginPx = - if (shouldApplyWidePortraitDimens) - res.getDimensionPixelSize( - R.dimen.spring_loaded_hotseat_top_margin_wide_portrait, - ) - else res.getDimensionPixelSize(R.dimen.spring_loaded_hotseat_top_margin) - val hotseatBarEdgePaddingPx = - when { - !isVerticalBarLayout -> 0 - responsiveHotseatSpec != null -> responsiveHotseatSpec.edgePadding - else -> workspacePageIndicatorHeight - } - val isQsbEnable = hotseatMode.layoutResourceId != R.layout.empty_view - - val hotseatBarWorkspaceSpacePx = - if (responsiveHotseatSpec != null) 0 - else res.getDimensionPixelSize(R.dimen.dynamic_grid_hotseat_side_padding) - val hotseatQsbHeight = - if (isQsbEnable) res.getDimensionPixelSize(R.dimen.qsb_widget_height) else 0 - val hotseatQsbShadowHeight = res.getDimensionPixelSize(R.dimen.qsb_shadow_height) - val hotseatQsbVisualHeight = - if (isQsbEnable) hotseatQsbHeight - 2 * hotseatQsbShadowHeight else 0 - - return HotseatProfile( - areNavButtonsInline = areNavButtonsInline, - navButtonsLayoutWidthPx = navButtonsLayoutWidthPx, - inlineNavButtonsEndSpacingPx = inlineNavButtonsEndSpacingPx, - barEndOffset = barEndOffset, - springLoadedBarTopMarginPx = springLoadedHotseatBarTopMarginPx, - barEdgePaddingPx = hotseatBarEdgePaddingPx, - barWorkspaceSpacePx = hotseatBarWorkspaceSpacePx, - qsbHeight = hotseatQsbHeight, - qsbShadowHeight = hotseatQsbShadowHeight, - qsbVisualHeight = hotseatQsbVisualHeight, - minIconSpacePx = res.getDimensionPixelSize(R.dimen.min_hotseat_icon_space), - minQsbWidthPx = res.getDimensionPixelSize(R.dimen.min_hotseat_qsb_width), - maxIconSpacePx = - if (areNavButtonsInline) - res.getDimensionPixelSize(R.dimen.max_hotseat_icon_space) - else Int.MAX_VALUE, - ) - } - } -} diff --git a/src/com/android/launcher3/widget/WidgetManagerHelper.java b/src/com/android/launcher3/widget/WidgetManagerHelper.java index 5bba69063c..8bdaa415ff 100644 --- a/src/com/android/launcher3/widget/WidgetManagerHelper.java +++ b/src/com/android/launcher3/widget/WidgetManagerHelper.java @@ -34,6 +34,7 @@ import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.annotation.VisibleForTesting; +import com.android.launcher3.Utilities; import com.android.launcher3.logging.FileLog; import com.android.launcher3.model.data.LauncherAppWidgetInfo; import com.android.launcher3.pm.UserCache;