Skip to content

Commit 0e275be

Browse files
authored
Merge pull request #87 from wordpress-mobile/issue/13396-media-picker-edge-to-edge-support
Media picker edge to edge support
2 parents a636629 + 732de84 commit 0e275be

File tree

3 files changed

+44
-0
lines changed

3 files changed

+44
-0
lines changed

mediapicker/src/main/java/org/wordpress/android/mediapicker/ui/MediaPickerActivity.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ import android.content.Intent
66
import android.os.Bundle
77
import android.view.MenuItem
88
import androidx.appcompat.app.AppCompatActivity
9+
import androidx.core.view.updatePadding
910
import dagger.hilt.android.AndroidEntryPoint
1011
import org.wordpress.android.mediapicker.R
1112
import org.wordpress.android.mediapicker.api.Log
1213
import org.wordpress.android.mediapicker.api.MediaPickerSetup
1314
import org.wordpress.android.mediapicker.databinding.MediaPickerLibActivityBinding
15+
import org.wordpress.android.mediapicker.util.doOnApplyWindowInsets
1416
import javax.inject.Inject
1517

1618
@AndroidEntryPoint
@@ -27,6 +29,17 @@ class MediaPickerActivity : AppCompatActivity() {
2729
setDisplayHomeAsUpEnabled(true)
2830
setDisplayShowTitleEnabled(true)
2931
}
32+
applyEdgeToEdgeSettings(binding)
33+
}
34+
35+
fun applyEdgeToEdgeSettings(binding: MediaPickerLibActivityBinding) {
36+
binding.root.doOnApplyWindowInsets { insets ->
37+
binding.toolbarMain.setPadding(0, insets.top, 0, 0)
38+
binding.root.updatePadding(
39+
left = insets.left,
40+
right = insets.right
41+
)
42+
}
3043
}
3144

3245
override fun onOptionsItemSelected(item: MenuItem): Boolean {

mediapicker/src/main/java/org/wordpress/android/mediapicker/ui/MediaPickerFragment.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ import androidx.appcompat.app.AppCompatActivity
2020
import androidx.appcompat.widget.SearchView
2121
import androidx.core.text.HtmlCompat
2222
import androidx.core.view.MenuProvider
23+
import androidx.core.view.WindowInsetsCompat
2324
import androidx.core.view.isVisible
25+
import androidx.core.view.updatePadding
2426
import androidx.fragment.app.Fragment
2527
import androidx.fragment.app.viewModels
2628
import androidx.lifecycle.lifecycleScope
@@ -68,6 +70,7 @@ import org.wordpress.android.mediapicker.util.MediaPickerLinkMovementMethod
6870
import org.wordpress.android.mediapicker.util.MediaPickerPermissionUtils
6971
import org.wordpress.android.mediapicker.util.MediaUtils
7072
import org.wordpress.android.mediapicker.util.UiHelpers
73+
import org.wordpress.android.mediapicker.util.doOnApplyWindowInsets
7174
import org.wordpress.android.mediapicker.viewmodel.MediaPickerViewModel
7275
import org.wordpress.android.mediapicker.viewmodel.observeEvent
7376
import javax.inject.Inject
@@ -225,6 +228,7 @@ internal class MediaPickerFragment : Fragment(), MenuProvider {
225228
}
226229
setupFab(uiState.fabUiModel)
227230
pullToRefresh.isRefreshing = uiState.isRefreshing
231+
applyEdgeToEdgeSettings(this)
228232
}
229233
}
230234

@@ -277,6 +281,19 @@ internal class MediaPickerFragment : Fragment(), MenuProvider {
277281
}
278282
}
279283

284+
private fun applyEdgeToEdgeSettings(binding: MediaPickerLibFragmentBinding){
285+
binding.root.doOnApplyWindowInsets(
286+
insetsMask = WindowInsetsCompat.Type.navigationBars(),
287+
consumeInsets = true
288+
) { insets ->
289+
binding.recycler.clipToPadding = false
290+
binding.recycler.updatePadding(bottom = insets.bottom)
291+
binding.actionableEmptyView.updatePadding(bottom = insets.bottom)
292+
binding.softAskView.updatePadding(bottom = insets.bottom)
293+
binding.loadingView.updatePadding(bottom = insets.bottom)
294+
}
295+
}
296+
280297
private fun onActionSelected(action: MediaPickerAction) {
281298
when (action) {
282299
is OpenSystemPicker -> {

mediapicker/src/main/java/org/wordpress/android/mediapicker/util/ViewUtils.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ import android.view.View
88
import android.view.animation.AccelerateDecelerateInterpolator
99
import android.view.animation.AnimationUtils
1010
import android.view.animation.LinearInterpolator
11+
import androidx.core.graphics.Insets
12+
import androidx.core.view.ViewCompat
13+
import androidx.core.view.WindowInsetsCompat
1114

1215
fun View.redirectContextClickToLongPressListener() {
1316
this.setOnContextClickListener { it.performLongClick() }
@@ -62,3 +65,14 @@ fun View?.fadeOut(duration: Long) {
6265
}.start()
6366
}
6467
}
68+
69+
inline fun View.doOnApplyWindowInsets(
70+
insetsMask: Int = WindowInsetsCompat.Type.systemBars() or WindowInsetsCompat.Type.displayCutout(),
71+
consumeInsets: Boolean = false,
72+
crossinline action: (Insets) -> Unit
73+
) {
74+
ViewCompat.setOnApplyWindowInsetsListener(this) { _, insets ->
75+
action(insets.getInsets(insetsMask))
76+
if (consumeInsets) WindowInsetsCompat.CONSUMED else insets
77+
}
78+
}

0 commit comments

Comments
 (0)