Skip to content

Commit 5630275

Browse files
committed
refactor: update edge-to-edge implementation
1 parent 8450baa commit 5630275

File tree

10 files changed

+73
-136
lines changed

10 files changed

+73
-136
lines changed

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,16 @@ class HiddenIconsActivity : SimpleActivity(), RefreshRecyclerViewListener {
2525
setContentView(binding.root)
2626
updateIcons()
2727

28-
updateEdgeToEdge(
29-
topAppBar = binding.manageHiddenIconsToolbar,
30-
scrollingView = binding.manageHiddenIconsList,
31-
)
32-
setupMaterialScrollListener(binding.manageHiddenIconsList, binding.manageHiddenIconsToolbar)
28+
setupEdgeToEdge(padBottomSystem = listOf(binding.manageHiddenIconsList))
29+
setupMaterialScrollListener(binding.manageHiddenIconsList, binding.manageHiddenIconsAppbar)
3330

3431
val layoutManager = binding.manageHiddenIconsList.layoutManager as MyGridLayoutManager
3532
layoutManager.spanCount = config.drawerColumnCount
3633
}
3734

3835
override fun onResume() {
3936
super.onResume()
40-
setupTopAppBar(binding.manageHiddenIconsToolbar, NavigationIcon.Arrow)
37+
setupTopAppBar(binding.manageHiddenIconsAppbar, NavigationIcon.Arrow)
4138
}
4239

4340
private fun updateIcons() {

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

Lines changed: 7 additions & 20 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
@@ -328,7 +316,6 @@ class MainActivity : SimpleActivity(), FlingListener {
328316
super.onConfigurationChanged(newConfig)
329317
binding.allAppsFragment.root.onConfigurationChanged()
330318
binding.widgetsFragment.root.onConfigurationChanged()
331-
updateStatusbarColor(Color.TRANSPARENT)
332319
}
333320

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

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,14 @@ class SettingsActivity : SimpleActivity() {
3434
super.onCreate(savedInstanceState)
3535
setContentView(binding.root)
3636

37-
updateEdgeToEdge(
38-
topAppBar = binding.settingsToolbar,
39-
scrollingView = binding.settingsNestedScrollview,
40-
)
41-
setupMaterialScrollListener(binding.settingsNestedScrollview, binding.settingsToolbar)
37+
setupEdgeToEdge(padBottomSystem = listOf(binding.settingsNestedScrollview))
38+
setupMaterialScrollListener(binding.settingsNestedScrollview, binding.settingsAppbar)
4239
setupOptionsMenu()
4340
}
4441

4542
override fun onResume() {
4643
super.onResume()
47-
setupTopAppBar(binding.settingsToolbar, NavigationIcon.Arrow)
44+
setupTopAppBar(binding.settingsAppbar, NavigationIcon.Arrow)
4845
refreshMenuItems()
4946

5047
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()

app/src/main/res/layout/activity_hidden_icons.xml

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,26 @@
55
android:layout_width="match_parent"
66
android:layout_height="match_parent">
77

8-
<com.google.android.material.appbar.MaterialToolbar
9-
android:id="@+id/manage_hidden_icons_toolbar"
8+
<org.fossify.commons.views.MyAppBarLayout
9+
android:id="@+id/manage_hidden_icons_appbar"
1010
android:layout_width="match_parent"
11-
android:layout_height="?attr/actionBarSize"
12-
android:background="@color/color_primary"
13-
app:title="@string/hidden_icons"
14-
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
11+
android:layout_height="wrap_content">
12+
13+
<com.google.android.material.appbar.MaterialToolbar
14+
android:id="@+id/manage_hidden_icons_toolbar"
15+
android:layout_width="match_parent"
16+
android:layout_height="?attr/actionBarSize"
17+
android:background="@color/color_primary"
18+
app:title="@string/hidden_icons"
19+
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
20+
21+
</org.fossify.commons.views.MyAppBarLayout>
1522

1623
<RelativeLayout
1724
android:id="@+id/manage_hidden_icons_wrapper"
1825
android:layout_width="match_parent"
1926
android:layout_height="wrap_content"
20-
android:layout_marginTop="?attr/actionBarSize">
27+
app:layout_behavior="@string/appbar_scrolling_view_behavior">
2128

2229
<org.fossify.commons.views.MyRecyclerView
2330
android:id="@+id/manage_hidden_icons_list"

app/src/main/res/layout/activity_settings.xml

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,29 @@
66
android:layout_width="match_parent"
77
android:layout_height="match_parent">
88

9-
<com.google.android.material.appbar.MaterialToolbar
10-
android:id="@+id/settings_toolbar"
9+
<org.fossify.commons.views.MyAppBarLayout
10+
android:id="@+id/settings_appbar"
1111
android:layout_width="match_parent"
12-
android:layout_height="?attr/actionBarSize"
13-
android:background="@color/color_primary"
14-
app:menu="@menu/menu_settings"
15-
app:title="@string/settings"
16-
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
12+
android:layout_height="wrap_content">
13+
14+
<com.google.android.material.appbar.MaterialToolbar
15+
android:id="@+id/settings_toolbar"
16+
android:layout_width="match_parent"
17+
android:layout_height="?attr/actionBarSize"
18+
android:background="@color/color_primary"
19+
app:menu="@menu/menu_settings"
20+
app:title="@string/settings"
21+
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
22+
23+
</org.fossify.commons.views.MyAppBarLayout>
1724

1825
<androidx.core.widget.NestedScrollView
1926
android:id="@+id/settings_nested_scrollview"
2027
android:layout_width="match_parent"
2128
android:layout_height="wrap_content"
22-
android:layout_marginTop="?attr/actionBarSize"
2329
android:fillViewport="true"
24-
android:scrollbars="none">
30+
android:scrollbars="none"
31+
app:layout_behavior="@string/appbar_scrolling_view_behavior">
2532

2633
<LinearLayout
2734
android:id="@+id/settings_holder"

0 commit comments

Comments
 (0)