Skip to content

Commit 4d9ba1d

Browse files
authored
chore: bump target SDK version to 35 (#214)
* chore: bump target SDK version to 35 * chore: bump target SDK version to 36 * refactor: update edge-to-edge implementation * refactor: update edge-to-edge implementation * refactor: update edge-to-edge implementation * refactor: migrate away from deprecated onBackPressed() * chore(deps): update org.fossify.commons to 5.5.0 * docs: update changelog * build: bump detekt return count limit * chore: update lint baselines
1 parent dd86c45 commit 4d9ba1d

File tree

15 files changed

+155
-217
lines changed

15 files changed

+155
-217
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
66

77
## [Unreleased]
88

9+
### Changed
10+
11+
- Compatibility updates for Android 15 & 16
12+
913
## [1.4.0] - 2025-09-12
1014
### Changed
1115
- Pressing home button on home screen now returns to the first page ([#170])

app/detekt-baseline.xml

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
<ID>EmptyCatchBlock:WidgetsFragment.kt$WidgetsFragment${ }</ID>
2222
<ID>EmptyFunctionBlock:FolderIconsAdapter.kt$FolderIconsAdapter${}</ID>
2323
<ID>EmptyFunctionBlock:HiddenIconsAdapter.kt$HiddenIconsAdapter${}</ID>
24-
<ID>ForbiddenComment:AllAppsFragment.kt$AllAppsFragment$// TODO: Use WindowInsets API</ID>
2524
<ID>LargeClass:HomeScreenGrid.kt$HomeScreenGrid : RelativeLayout</ID>
2625
<ID>LargeClass:MainActivity.kt$MainActivity : SimpleActivityFlingListener</ID>
2726
<ID>LongMethod:HomeScreenGrid.kt$HomeScreenGrid$fun drawInto(canvas: Canvas)</ID>
@@ -108,13 +107,7 @@
108107
<ID>NestedBlockDepth:MyAppWidgetResizeFrame.kt$MyAppWidgetResizeFrame$override fun onTouchEvent(event: MotionEvent?): Boolean</ID>
109108
<ID>NewLineAtEndOfFile:IconCache.kt$org.fossify.home.helpers.IconCache.kt</ID>
110109
<ID>NewLineAtEndOfFile:View.kt$org.fossify.home.extensions.View.kt</ID>
111-
<ID>ReturnCount:AllAppsFragment.kt$AllAppsFragment$override fun onInterceptTouchEvent(event: MotionEvent?): Boolean</ID>
112110
<ID>ReturnCount:HomeScreenGrid.kt$HomeScreenGrid$fun isClickingGridItem(x: Int, y: Int): HomeScreenGridItem?</ID>
113-
<ID>ReturnCount:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenFolder$fun generateDrawable(): Drawable?</ID>
114-
<ID>ReturnCount:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenFolder$fun getDrawingRect(): RectF</ID>
115-
<ID>ReturnCount:HomeScreenGrid.kt$HomeScreenGrid.HomeScreenGridTouchHelper$override fun onPerformActionForVirtualView( virtualViewId: Int, action: Int, arguments: Bundle?, ): Boolean</ID>
116-
<ID>ReturnCount:MyAppWidgetHostView.kt$MyAppWidgetHostView$override fun onInterceptTouchEvent(event: MotionEvent?): Boolean</ID>
117-
<ID>ReturnCount:WidgetsFragment.kt$WidgetsFragment$override fun onInterceptTouchEvent(event: MotionEvent?): Boolean</ID>
118111
<ID>SwallowedException:Activity.kt$e: Exception</ID>
119112
<ID>SwallowedException:Context.kt$e: Error</ID>
120113
<ID>SwallowedException:Context.kt$e: Exception</ID>

app/lint-baseline.xml

Lines changed: 61 additions & 61 deletions
Large diffs are not rendered by default.

app/src/main/kotlin/org/fossify/home/activities/HiddenIconsActivity.kt

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,26 +21,20 @@ class HiddenIconsActivity : SimpleActivity(), RefreshRecyclerViewListener {
2121
private val binding by viewBinding(ActivityHiddenIconsBinding::inflate)
2222

2323
override fun onCreate(savedInstanceState: Bundle?) {
24-
isMaterialActivity = true
2524
super.onCreate(savedInstanceState)
2625
setContentView(binding.root)
2726
updateIcons()
2827

29-
updateMaterialActivityViews(
30-
binding.manageHiddenIconsCoordinator,
31-
binding.manageHiddenIconsList,
32-
useTransparentNavigation = true,
33-
useTopSearchMenu = false
34-
)
35-
setupMaterialScrollListener(binding.manageHiddenIconsList, binding.manageHiddenIconsToolbar)
28+
setupEdgeToEdge(padBottomSystem = listOf(binding.manageHiddenIconsList))
29+
setupMaterialScrollListener(binding.manageHiddenIconsList, binding.manageHiddenIconsAppbar)
3630

3731
val layoutManager = binding.manageHiddenIconsList.layoutManager as MyGridLayoutManager
3832
layoutManager.spanCount = config.drawerColumnCount
3933
}
4034

4135
override fun onResume() {
4236
super.onResume()
43-
setupToolbar(binding.manageHiddenIconsToolbar, NavigationIcon.Arrow)
37+
setupTopAppBar(binding.manageHiddenIconsAppbar, NavigationIcon.Arrow)
4438
}
4539

4640
private fun updateIcons() {

app/src/main/kotlin/org/fossify/home/activities/MainActivity.kt

Lines changed: 16 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,6 @@ import androidx.core.graphics.drawable.toDrawable
3838
import androidx.core.net.toUri
3939
import androidx.core.view.GestureDetectorCompat
4040
import androidx.core.view.WindowCompat
41-
import androidx.core.view.WindowInsetsCompat
42-
import androidx.core.view.WindowInsetsCompat.Type
4341
import androidx.core.view.isVisible
4442
import androidx.core.view.iterator
4543
import androidx.viewbinding.ViewBinding
@@ -135,11 +133,16 @@ class MainActivity : SimpleActivity(), FlingListener {
135133
super.onCreate(savedInstanceState)
136134
setContentView(binding.root)
137135
appLaunched(BuildConfig.APPLICATION_ID)
136+
setupEdgeToEdge(
137+
padTopSystem = listOf(binding.widgetsFragment.root),
138+
padBottomImeAndSystem = listOf(
139+
binding.allAppsFragment.root, binding.widgetsFragment.root
140+
),
141+
padBottomSystem = listOf(binding.homeScreenGrid.root)
142+
)
138143

139144
mDetector = GestureDetectorCompat(this, MyGestureListener(this))
140145

141-
WindowCompat.setDecorFitsSystemWindows(window, false)
142-
143146
mScreenHeight = realScreenSize.y
144147
mAllAppsFragmentY = mScreenHeight
145148
mWidgetsFragmentY = mScreenHeight
@@ -206,21 +209,11 @@ class MainActivity : SimpleActivity(), FlingListener {
206209
override fun onResume() {
207210
super.onResume()
208211
wasJustPaused = false
209-
updateStatusbarColor(Color.TRANSPARENT)
210212

211213
with(binding.mainHolder) {
212214
onGlobalLayout {
213215
binding.allAppsFragment.root.setupViews()
214216
binding.widgetsFragment.root.setupViews()
215-
updateStatusbarColor(Color.TRANSPARENT)
216-
}
217-
218-
setOnApplyWindowInsetsListener { _, insets ->
219-
val windowInsets = WindowInsetsCompat.toWindowInsetsCompat(insets)
220-
val systemBarInsets = windowInsets.getInsets(Type.systemBars() or Type.ime())
221-
binding.allAppsFragment.root.setPadding(0, systemBarInsets.top, 0, 0)
222-
binding.widgetsFragment.root.setPadding(0, systemBarInsets.top, 0, 0)
223-
insets
224217
}
225218
}
226219

@@ -246,11 +239,6 @@ class MainActivity : SimpleActivity(), FlingListener {
246239
refreshLaunchers()
247240
}
248241

249-
// avoid showing fully colored navigation bars
250-
if (window.navigationBarColor != resources.getColor(R.color.semitransparent_navigation)) {
251-
window.navigationBarColor = Color.TRANSPARENT
252-
}
253-
254242
binding.homeScreenGrid.root.resizeGrid(
255243
newRowCount = config.homeRowCount,
256244
newColumnCount = config.homeColumnCount
@@ -274,19 +262,23 @@ class MainActivity : SimpleActivity(), FlingListener {
274262
wasJustPaused = true
275263
}
276264

277-
@SuppressLint("MissingSuperCall")
278-
override fun onBackPressed() {
279-
if (isAllAppsFragmentExpanded()) {
265+
override fun onBackPressedCompat(): Boolean {
266+
return if (isAllAppsFragmentExpanded()) {
280267
if (!binding.allAppsFragment.root.onBackPressed()) {
281268
hideFragment(binding.allAppsFragment)
269+
true
270+
} else {
271+
true
282272
}
283273
} else if (isWidgetsFragmentExpanded()) {
284274
hideFragment(binding.widgetsFragment)
275+
true
285276
} else if (binding.homeScreenGrid.resizeFrame.isVisible) {
286277
binding.homeScreenGrid.root.hideResizeLines()
278+
true
287279
} else {
288-
// this is a home launcher app, avoid glitching by pressing Back
289-
//super.onBackPressed()
280+
// this is a home launcher app, prevent back press from doing anything
281+
true
290282
}
291283
}
292284

@@ -328,7 +320,6 @@ class MainActivity : SimpleActivity(), FlingListener {
328320
super.onConfigurationChanged(newConfig)
329321
binding.allAppsFragment.root.onConfigurationChanged()
330322
binding.widgetsFragment.root.onConfigurationChanged()
331-
updateStatusbarColor(Color.TRANSPARENT)
332323
}
333324

334325
override fun onTouchEvent(event: MotionEvent?): Boolean {

app/src/main/kotlin/org/fossify/home/activities/SettingsActivity.kt

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,23 +31,17 @@ class SettingsActivity : SimpleActivity() {
3131

3232
private val binding by viewBinding(ActivitySettingsBinding::inflate)
3333
override fun onCreate(savedInstanceState: Bundle?) {
34-
isMaterialActivity = true
3534
super.onCreate(savedInstanceState)
3635
setContentView(binding.root)
3736

38-
updateMaterialActivityViews(
39-
mainCoordinatorLayout = binding.settingsCoordinator,
40-
nestedView = binding.settingsHolder,
41-
useTransparentNavigation = true,
42-
useTopSearchMenu = false
43-
)
44-
setupMaterialScrollListener(binding.settingsNestedScrollview, binding.settingsToolbar)
37+
setupEdgeToEdge(padBottomSystem = listOf(binding.settingsNestedScrollview))
38+
setupMaterialScrollListener(binding.settingsNestedScrollview, binding.settingsAppbar)
4539
setupOptionsMenu()
4640
}
4741

4842
override fun onResume() {
4943
super.onResume()
50-
setupToolbar(binding.settingsToolbar, NavigationIcon.Arrow)
44+
setupTopAppBar(binding.settingsAppbar, NavigationIcon.Arrow)
5145
refreshMenuItems()
5246

5347
setupCustomizeColors()

app/src/main/kotlin/org/fossify/home/extensions/View.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package org.fossify.home.extensions
22

3-
import android.graphics.drawable.ColorDrawable
43
import android.graphics.drawable.LayerDrawable
54
import android.view.RoundedCorner.POSITION_TOP_LEFT
65
import android.view.RoundedCorner.POSITION_TOP_RIGHT
76
import android.view.View
87
import android.view.animation.AccelerateDecelerateInterpolator
98
import androidx.core.content.res.ResourcesCompat
9+
import androidx.core.graphics.drawable.toDrawable
1010
import org.fossify.commons.R
1111
import org.fossify.commons.extensions.applyColorFilter
1212
import org.fossify.commons.extensions.getProperBackgroundColor
@@ -28,7 +28,7 @@ fun View.animateScale(
2828

2929
fun View.setupDrawerBackground() {
3030
val backgroundColor = context.getProperBackgroundColor()
31-
background = ColorDrawable(backgroundColor)
31+
background = backgroundColor.toDrawable()
3232

3333
val insets = rootWindowInsets
3434
if (isSPlus() && insets != null) {

app/src/main/kotlin/org/fossify/home/fragments/AllAppsFragment.kt

Lines changed: 1 addition & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,14 @@ import android.annotation.SuppressLint
44
import android.content.Context
55
import android.util.AttributeSet
66
import android.view.MotionEvent
7-
import android.view.Surface
8-
import android.view.WindowManager
97
import androidx.recyclerview.widget.RecyclerView
108
import androidx.recyclerview.widget.RecyclerView.OnScrollListener
11-
import org.fossify.commons.R
129
import org.fossify.commons.extensions.beGone
1310
import org.fossify.commons.extensions.beVisibleIf
1411
import org.fossify.commons.extensions.getProperPrimaryColor
1512
import org.fossify.commons.extensions.getProperTextColor
1613
import org.fossify.commons.extensions.hideKeyboard
17-
import org.fossify.commons.extensions.navigationBarHeight
18-
import org.fossify.commons.extensions.navigationBarOnBottom
19-
import org.fossify.commons.extensions.navigationBarOnSide
20-
import org.fossify.commons.extensions.navigationBarWidth
2114
import org.fossify.commons.extensions.normalizeString
22-
import org.fossify.commons.helpers.isRPlus
2315
import org.fossify.commons.views.MyGridLayoutManager
2416
import org.fossify.home.activities.MainActivity
2517
import org.fossify.home.adapters.LaunchersAdapter
@@ -189,39 +181,6 @@ class AllAppsFragment(
189181
}
190182

191183
binding.allAppsFastscroller.updateColors(context.getProperPrimaryColor())
192-
193-
var bottomListPadding = 0
194-
var leftListPadding = 0
195-
var rightListPadding = 0
196-
197-
// TODO: Use WindowInsets API
198-
if (activity!!.navigationBarOnBottom) {
199-
bottomListPadding = activity!!.navigationBarHeight
200-
leftListPadding = 0
201-
rightListPadding = 0
202-
} else if (activity!!.navigationBarOnSide) {
203-
bottomListPadding = 0
204-
205-
val display = if (isRPlus()) {
206-
display!!
207-
} else {
208-
(activity!!.getSystemService(Context.WINDOW_SERVICE) as WindowManager).defaultDisplay
209-
}
210-
211-
if (display.rotation == Surface.ROTATION_90) {
212-
rightListPadding = activity!!.navigationBarWidth
213-
} else if (display.rotation == Surface.ROTATION_270) {
214-
leftListPadding = activity!!.navigationBarWidth
215-
}
216-
}
217-
218-
binding.allAppsGrid.setPadding(
219-
0,
220-
0,
221-
resources.getDimension(R.dimen.medium_margin).toInt(),
222-
bottomListPadding
223-
)
224-
binding.allAppsFastscroller.setPadding(leftListPadding, 0, rightListPadding, 0)
225184
binding.allAppsGrid.addOnScrollListener(object : OnScrollListener() {
226185
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
227186
// Hiding is expensive, only do it if focused
@@ -235,7 +194,7 @@ class AllAppsFragment(
235194
getAdapter()?.updateTextColor(context.getProperTextColor())
236195

237196
binding.searchBar.beVisibleIf(context.config.showSearchBar)
238-
binding.searchBar.getToolbar().beGone()
197+
binding.searchBar.requireToolbar().beGone()
239198
binding.searchBar.updateColors()
240199
binding.searchBar.setupMenu()
241200

app/src/main/kotlin/org/fossify/home/fragments/WidgetsFragment.kt

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -9,18 +9,11 @@ import android.content.pm.PackageManager
99
import android.os.Process
1010
import android.util.AttributeSet
1111
import android.view.MotionEvent
12-
import android.view.Surface
13-
import android.view.WindowManager
1412
import org.fossify.commons.extensions.getProperPrimaryColor
1513
import org.fossify.commons.extensions.getProperTextColor
16-
import org.fossify.commons.extensions.navigationBarHeight
17-
import org.fossify.commons.extensions.navigationBarOnBottom
18-
import org.fossify.commons.extensions.navigationBarOnSide
19-
import org.fossify.commons.extensions.navigationBarWidth
2014
import org.fossify.commons.extensions.showErrorToast
2115
import org.fossify.commons.extensions.toast
2216
import org.fossify.commons.helpers.ensureBackgroundThread
23-
import org.fossify.commons.helpers.isRPlus
2417
import org.fossify.home.R
2518
import org.fossify.home.activities.MainActivity
2619
import org.fossify.home.adapters.WidgetsAdapter
@@ -232,33 +225,6 @@ class WidgetsFragment(context: Context, attributeSet: AttributeSet) :
232225
}
233226

234227
binding.widgetsFastscroller.updateColors(context.getProperPrimaryColor())
235-
236-
var bottomListPadding = 0
237-
var leftListPadding = 0
238-
var rightListPadding = 0
239-
240-
if (activity!!.navigationBarOnBottom) {
241-
bottomListPadding = activity!!.navigationBarHeight
242-
leftListPadding = 0
243-
rightListPadding = 0
244-
} else if (activity!!.navigationBarOnSide) {
245-
bottomListPadding = 0
246-
247-
val display = if (isRPlus()) {
248-
display!!
249-
} else {
250-
(activity!!.getSystemService(Context.WINDOW_SERVICE) as WindowManager).defaultDisplay
251-
}
252-
253-
if (display.rotation == Surface.ROTATION_90) {
254-
rightListPadding = activity!!.navigationBarWidth
255-
} else if (display.rotation == Surface.ROTATION_270) {
256-
leftListPadding = activity!!.navigationBarWidth
257-
}
258-
}
259-
260-
binding.widgetsList.setPadding(0, 0, 0, bottomListPadding)
261-
binding.widgetsFastscroller.setPadding(leftListPadding, 0, rightListPadding, 0)
262228
(binding.widgetsList.adapter as? WidgetsAdapter)?.updateTextColor(context.getProperTextColor())
263229
setupDrawerBackground()
264230
}

app/src/main/kotlin/org/fossify/home/views/HomeScreenGrid.kt

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import androidx.core.graphics.toRect
3838
import androidx.core.graphics.withScale
3939
import androidx.core.graphics.withTranslation
4040
import androidx.core.view.ViewCompat
41+
import androidx.core.view.WindowInsetsCompat.Type
4142
import androidx.core.view.accessibility.AccessibilityNodeInfoCompat
4243
import androidx.customview.widget.ExploreByTouchHelper
4344
import com.google.android.material.math.MathUtils
@@ -48,9 +49,7 @@ import org.fossify.commons.extensions.beVisible
4849
import org.fossify.commons.extensions.getContrastColor
4950
import org.fossify.commons.extensions.getProperBackgroundColor
5051
import org.fossify.commons.extensions.getProperTextColor
51-
import org.fossify.commons.extensions.navigationBarHeight
5252
import org.fossify.commons.extensions.performHapticFeedback
53-
import org.fossify.commons.extensions.statusBarHeight
5453
import org.fossify.commons.helpers.ensureBackgroundThread
5554
import org.fossify.commons.helpers.isSPlus
5655
import org.fossify.home.R
@@ -189,13 +188,31 @@ class HomeScreenGrid(context: Context, attrs: AttributeSet, defStyle: Int) :
189188
style = Paint.Style.FILL
190189
}
191190

192-
val sideMargin =
193-
context.resources.getDimension(org.fossify.commons.R.dimen.normal_margin).toInt()
194-
sideMargins.apply {
195-
top = context.statusBarHeight
196-
bottom = context.navigationBarHeight
197-
left = sideMargin
198-
right = sideMargin
191+
ViewCompat.setOnApplyWindowInsetsListener(this) { _, insets ->
192+
val bars = insets.getInsets(Type.systemBars() or Type.displayCutout())
193+
val gestures = insets.getInsets(Type.systemGestures())
194+
val navIgnoring = insets.getInsetsIgnoringVisibility(Type.navigationBars())
195+
196+
val sideMargin = context.resources
197+
.getDimension(org.fossify.commons.R.dimen.normal_margin).toInt()
198+
199+
val newLeft = sideMargin + bars.left
200+
val newRight = sideMargin + bars.right
201+
val newTop = bars.top
202+
val newBottom = max(bars.bottom, max(gestures.bottom, navIgnoring.bottom))
203+
val marginsChanged = sideMargins.left != newLeft
204+
|| sideMargins.top != newTop
205+
|| sideMargins.right != newRight
206+
|| sideMargins.bottom != newBottom
207+
if (marginsChanged) {
208+
sideMargins.set(newLeft, newTop, newRight, newBottom)
209+
cells.clear()
210+
gridCenters.clear()
211+
isFirstDraw = true
212+
redrawGrid()
213+
}
214+
215+
insets
199216
}
200217

201218
fetchGridItems()

0 commit comments

Comments
 (0)