Skip to content

Commit 2d073dd

Browse files
committed
add setImmersiveFullscreen to toggle navbar in android
Issue koreader/koreader#8532
1 parent 503e295 commit 2d073dd

File tree

1 file changed

+34
-2
lines changed

1 file changed

+34
-2
lines changed

app/src/main/java/org/koreader/launcher/MainActivity.kt

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ import android.view.*
2020
import android.widget.Toast
2121
import androidx.core.app.ActivityCompat
2222
import androidx.core.content.ContextCompat
23+
import androidx.core.view.ViewCompat
24+
import androidx.core.view.WindowInsetsCompat
2325
import org.koreader.launcher.device.Device
2426
import org.koreader.launcher.dialog.LightDialog
2527
import org.koreader.launcher.extensions.*
@@ -564,7 +566,8 @@ class MainActivity : NativeActivity(), LuaInterface,
564566

565567
override fun isFullscreen(): Boolean {
566568
return if (Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN_MR2 ||
567-
Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN_MR1) {
569+
Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN_MR1 ||
570+
Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
568571
fullscreen
569572
} else if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN) {
570573
isFullscreenDeprecated()
@@ -681,12 +684,39 @@ class MainActivity : NativeActivity(), LuaInterface,
681684
}
682685
}
683686

687+
fun setFullscreenImmersive(enabled: Boolean) {
688+
val windowInsetsController = ViewCompat.getWindowInsetsController(window.decorView) ?: return
689+
690+
val cd = CountDownLatch(1)
691+
runOnUiThread {
692+
try {
693+
if (enabled) {
694+
windowInsetsController.hide(WindowInsetsCompat.Type.navigationBars())
695+
} else {
696+
windowInsetsController.show(WindowInsetsCompat.Type.navigationBars())
697+
}
698+
} catch (e: Exception) {
699+
e.printStackTrace()
700+
}
701+
cd.countDown()
702+
}
703+
704+
try {
705+
cd.await()
706+
fullscreen = enabled
707+
} catch (ex: InterruptedException) {
708+
ex.printStackTrace()
709+
}
710+
}
711+
684712
override fun setFullscreen(enabled: Boolean) {
685713
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN_MR2 ||
686714
Build.VERSION.SDK_INT == Build.VERSION_CODES.JELLY_BEAN_MR1) {
687715
fullscreen = enabled
688716
} else if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN) {
689717
setFullscreenDeprecated(enabled)
718+
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
719+
setFullscreenImmersive(enabled)
690720
}
691721
}
692722

@@ -811,13 +841,15 @@ class MainActivity : NativeActivity(), LuaInterface,
811841
private fun setFullscreenLayout() {
812842
val decorView = window.decorView
813843
when {
814-
Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ->
844+
Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT -> {
815845
decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN or
816846
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
817847
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY or
818848
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
819849
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
820850
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
851+
setFullscreenImmersive(fullscreen)
852+
}
821853
Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN ->
822854
decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN or
823855
View.SYSTEM_UI_FLAG_LOW_PROFILE

0 commit comments

Comments
 (0)