Skip to content

Commit c7c96d2

Browse files
committed
Add fullscreen mode in PDF Viewer
1 parent 72500d1 commit c7c96d2

File tree

2 files changed

+90
-2
lines changed

2 files changed

+90
-2
lines changed

app/src/main/kotlin/com/simplemobiletools/filemanager/pro/activities/PDFViewerActivity.kt

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,36 @@
11
package com.simplemobiletools.filemanager.pro.activities
22

33
import android.content.Context
4+
import android.content.res.Configuration.UI_MODE_NIGHT_NO
45
import android.os.Bundle
56
import android.print.PrintAttributes
67
import android.print.PrintManager
78
import android.view.Menu
89
import android.view.MenuItem
10+
import android.view.View
11+
import android.view.WindowManager
12+
import android.widget.RelativeLayout
13+
import androidx.core.view.updateLayoutParams
914
import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle
1015
import com.simplemobiletools.commons.extensions.*
1116
import com.simplemobiletools.commons.helpers.REAL_FILE_PATH
17+
import com.simplemobiletools.commons.helpers.isPiePlus
18+
import com.simplemobiletools.commons.helpers.isSPlus
1219
import com.simplemobiletools.filemanager.pro.R
20+
import com.simplemobiletools.filemanager.pro.extensions.config
21+
import com.simplemobiletools.filemanager.pro.extensions.getUiMode
22+
import com.simplemobiletools.filemanager.pro.extensions.hideSystemUI
23+
import com.simplemobiletools.filemanager.pro.extensions.showSystemUI
1324
import com.simplemobiletools.filemanager.pro.helpers.PdfDocumentAdapter
1425
import kotlinx.android.synthetic.main.activity_pdf_viewer.*
1526

27+
1628
class PDFViewerActivity : SimpleActivity() {
17-
var realFilePath = ""
29+
private var realFilePath = ""
30+
31+
private var systemUiVisible = true
32+
private var pdfViewerHeight = -1
33+
private var positionOffset = 0f
1834

1935
override fun onCreate(savedInstanceState: Bundle?) {
2036
super.onCreate(savedInstanceState)
@@ -29,6 +45,7 @@ class PDFViewerActivity : SimpleActivity() {
2945
}
3046

3147
checkIntent()
48+
setupFullScreenView()
3249
}
3350

3451
override fun onCreateOptionsMenu(menu: Menu): Boolean {
@@ -76,4 +93,48 @@ class PDFViewerActivity : SimpleActivity() {
7693
print(realFilePath.getFilenameFromPath(), adapter, PrintAttributes.Builder().build())
7794
}
7895
}
96+
97+
private fun setupFullScreenView() {
98+
pdf_viewer.setOnClickListener {
99+
if (systemUiVisible) enterFullScreen() else exitFullScreen()
100+
systemUiVisible = !systemUiVisible
101+
}
102+
setupNotch()
103+
}
104+
105+
private fun enterFullScreen() {
106+
if (pdfViewerHeight == -1) {
107+
pdfViewerHeight = pdf_viewer.height
108+
}
109+
positionOffset = pdf_viewer.positionOffset
110+
hideSystemUI(true)
111+
112+
pdf_viewer.updateLayoutParams<RelativeLayout.LayoutParams> {
113+
// hack to workaround pdf viewer height glitch
114+
this.height = pdf_viewer_wrapper.height + statusBarHeight + actionBarHeight
115+
}
116+
}
117+
118+
private fun exitFullScreen() {
119+
showSystemUI(true)
120+
pdf_viewer.updateLayoutParams<RelativeLayout.LayoutParams> {
121+
this.height = pdfViewerHeight
122+
}
123+
pdf_viewer.post { pdf_viewer.positionOffset = positionOffset }
124+
125+
@Suppress("DEPRECATION")
126+
// use light status bar on material you
127+
if (isSPlus() && config.isUsingSystemTheme && getUiMode() == UI_MODE_NIGHT_NO) {
128+
val flags = window.decorView.systemUiVisibility
129+
window.decorView.systemUiVisibility = flags or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
130+
}
131+
}
132+
133+
134+
private fun setupNotch() {
135+
if (isPiePlus()) {
136+
window.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
137+
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
138+
}
139+
}
79140
}

app/src/main/kotlin/com/simplemobiletools/filemanager/pro/extensions/Activity.kt

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@ package com.simplemobiletools.filemanager.pro.extensions
22

33
import android.app.Activity
44
import android.content.Intent
5+
import android.content.res.Configuration
56
import android.net.Uri
7+
import android.view.View
8+
import androidx.appcompat.app.AppCompatActivity
69
import androidx.core.content.FileProvider
710
import com.simplemobiletools.commons.activities.BaseSimpleActivity
811
import com.simplemobiletools.commons.extensions.*
912
import com.simplemobiletools.commons.helpers.isNougatPlus
1013
import com.simplemobiletools.filemanager.pro.BuildConfig
1114
import com.simplemobiletools.filemanager.pro.helpers.*
1215
import java.io.File
13-
import java.util.*
1416

1517
fun Activity.sharePaths(paths: ArrayList<String>) {
1618
sharePathsIntent(paths, BuildConfig.APPLICATION_ID)
@@ -77,3 +79,28 @@ fun BaseSimpleActivity.toggleItemVisibility(oldPath: String, hide: Boolean, call
7779
}
7880
}
7981
}
82+
83+
@Suppress("DEPRECATION")
84+
fun AppCompatActivity.showSystemUI(toggleActionBarVisibility: Boolean) {
85+
if (toggleActionBarVisibility) {
86+
supportActionBar?.show()
87+
}
88+
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE
89+
}
90+
91+
@Suppress("DEPRECATION")
92+
fun AppCompatActivity.hideSystemUI(toggleActionBarVisibility: Boolean) {
93+
if (toggleActionBarVisibility) {
94+
supportActionBar?.hide()
95+
}
96+
97+
window.decorView.systemUiVisibility =
98+
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
99+
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
100+
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
101+
View.SYSTEM_UI_FLAG_LOW_PROFILE or
102+
View.SYSTEM_UI_FLAG_FULLSCREEN or
103+
View.SYSTEM_UI_FLAG_IMMERSIVE
104+
}
105+
106+
fun Activity.getUiMode() = resources?.configuration?.uiMode?.and(Configuration.UI_MODE_NIGHT_MASK)

0 commit comments

Comments
 (0)