Merge pull request #592 from Naveen3Singh/fullscreen_toggle

Add fullscreen toggle in PDF Viewer
This commit is contained in:
Tibor Kaputa 2022-06-11 22:18:35 +02:00 committed by GitHub
commit b9c3913949
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 106 additions and 9 deletions

View File

@ -1,22 +1,33 @@
package com.simplemobiletools.filemanager.pro.activities package com.simplemobiletools.filemanager.pro.activities
import android.content.Context import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle import android.os.Bundle
import android.print.PrintAttributes import android.print.PrintAttributes
import android.print.PrintManager import android.print.PrintManager
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
import android.view.WindowInsetsController
import android.view.WindowManager
import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.REAL_FILE_PATH import com.simplemobiletools.commons.helpers.REAL_FILE_PATH
import com.simplemobiletools.commons.helpers.isPiePlus
import com.simplemobiletools.commons.helpers.isRPlus
import com.simplemobiletools.filemanager.pro.R import com.simplemobiletools.filemanager.pro.R
import com.simplemobiletools.filemanager.pro.extensions.hideSystemUI
import com.simplemobiletools.filemanager.pro.extensions.showSystemUI
import com.simplemobiletools.filemanager.pro.helpers.PdfDocumentAdapter import com.simplemobiletools.filemanager.pro.helpers.PdfDocumentAdapter
import kotlinx.android.synthetic.main.activity_pdf_viewer.* import kotlinx.android.synthetic.main.activity_pdf_viewer.*
class PDFViewerActivity : SimpleActivity() { class PDFViewerActivity : SimpleActivity() {
var realFilePath = "" private var realFilePath = ""
private var isFullScreen = false
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
useDynamicTheme = false
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_pdf_viewer) setContentView(R.layout.activity_pdf_viewer)
@ -24,11 +35,25 @@ class PDFViewerActivity : SimpleActivity() {
return return
} }
window.decorView.setBackgroundColor(getProperBackgroundColor())
top_shadow.layoutParams.height = statusBarHeight + actionBarHeight
checkNotchSupport()
if (intent.extras?.containsKey(REAL_FILE_PATH) == true) { if (intent.extras?.containsKey(REAL_FILE_PATH) == true) {
realFilePath = intent.extras?.get(REAL_FILE_PATH)?.toString() ?: "" realFilePath = intent.extras?.get(REAL_FILE_PATH)?.toString() ?: ""
} }
checkIntent() checkIntent()
if (isRPlus()) {
window.insetsController?.setSystemBarsAppearance(0, WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS)
}
}
override fun onResume() {
super.onResume()
supportActionBar?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
window.statusBarColor = Color.TRANSPARENT
setTranslucentNavigation()
} }
override fun onCreateOptionsMenu(menu: Menu): Boolean { override fun onCreateOptionsMenu(menu: Menu): Boolean {
@ -37,7 +62,7 @@ class PDFViewerActivity : SimpleActivity() {
findItem(R.id.menu_print).isVisible = realFilePath.isNotEmpty() findItem(R.id.menu_print).isVisible = realFilePath.isNotEmpty()
} }
updateMenuItemColors(menu) updateMenuItemColors(menu, forceWhiteIcons = true)
return true return true
} }
@ -56,17 +81,22 @@ class PDFViewerActivity : SimpleActivity() {
return return
} }
val filename = getFilenameFromUri(uri)
if (filename.isNotEmpty()) {
title = filename
}
val primaryColor = getProperPrimaryColor() val primaryColor = getProperPrimaryColor()
pdf_viewer.setBackgroundColor(getProperBackgroundColor()) pdf_viewer.setBackgroundColor(getProperBackgroundColor())
pdf_viewer.fromUri(uri) pdf_viewer.fromUri(uri)
.scrollHandle(DefaultScrollHandle(this, primaryColor.getContrastColor(), primaryColor)) .scrollHandle(DefaultScrollHandle(this, primaryColor.getContrastColor(), primaryColor))
.spacing(15) .spacing(15)
.onTap { toggleFullScreen() }
.load() .load()
showSystemUI(true)
pdf_viewer_wrapper.onGlobalLayout {
val filename = getFilenameFromUri(uri)
if (filename.isNotEmpty()) {
supportActionBar?.title = filename
}
}
} }
private fun printText() { private fun printText() {
@ -76,4 +106,28 @@ class PDFViewerActivity : SimpleActivity() {
print(realFilePath.getFilenameFromPath(), adapter, PrintAttributes.Builder().build()) print(realFilePath.getFilenameFromPath(), adapter, PrintAttributes.Builder().build())
} }
} }
private fun toggleFullScreen(): Boolean {
isFullScreen = !isFullScreen
val newAlpha: Float
if (isFullScreen) {
newAlpha = 0f
hideSystemUI(true)
} else {
newAlpha = 1f
showSystemUI(true)
}
top_shadow.animate().alpha(newAlpha).start()
// return false to also toggle scroll handle
return true
}
private fun checkNotchSupport() {
if (isPiePlus()) {
window.attributes.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
}
}
} }

View File

@ -2,7 +2,10 @@ package com.simplemobiletools.filemanager.pro.extensions
import android.app.Activity import android.app.Activity
import android.content.Intent import android.content.Intent
import android.content.res.Configuration
import android.net.Uri import android.net.Uri
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.FileProvider import androidx.core.content.FileProvider
import com.simplemobiletools.commons.activities.BaseSimpleActivity import com.simplemobiletools.commons.activities.BaseSimpleActivity
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
@ -10,7 +13,6 @@ import com.simplemobiletools.commons.helpers.isNougatPlus
import com.simplemobiletools.filemanager.pro.BuildConfig import com.simplemobiletools.filemanager.pro.BuildConfig
import com.simplemobiletools.filemanager.pro.helpers.* import com.simplemobiletools.filemanager.pro.helpers.*
import java.io.File import java.io.File
import java.util.*
fun Activity.sharePaths(paths: ArrayList<String>) { fun Activity.sharePaths(paths: ArrayList<String>) {
sharePathsIntent(paths, BuildConfig.APPLICATION_ID) sharePathsIntent(paths, BuildConfig.APPLICATION_ID)
@ -77,3 +79,29 @@ fun BaseSimpleActivity.toggleItemVisibility(oldPath: String, hide: Boolean, call
} }
} }
} }
fun AppCompatActivity.showSystemUI(toggleActionBarVisibility: Boolean) {
if (toggleActionBarVisibility) {
supportActionBar?.show()
}
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
}
fun AppCompatActivity.hideSystemUI(toggleActionBarVisibility: Boolean) {
if (toggleActionBarVisibility) {
supportActionBar?.hide()
}
window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
View.SYSTEM_UI_FLAG_LOW_PROFILE or
View.SYSTEM_UI_FLAG_FULLSCREEN or
View.SYSTEM_UI_FLAG_IMMERSIVE
}
fun Activity.getUiMode() = resources?.configuration?.uiMode?.and(Configuration.UI_MODE_NIGHT_MASK)

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:angle="270"
android:endColor="@android:color/transparent"
android:startColor="@color/gradient_grey_start"/>
</shape>

View File

@ -9,4 +9,11 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" /> android:layout_height="match_parent" />
<ImageView
android:id="@+id/top_shadow"
android:layout_width="match_parent"
android:layout_height="@dimen/default_status_action_height"
android:background="@drawable/gradient_background_flipped"
android:contentDescription="@null" />
</RelativeLayout> </RelativeLayout>

View File

@ -1,4 +1,5 @@
<resources> <resources>
<dimen name="grid_view_icon_size">50dp</dimen> <dimen name="grid_view_icon_size">50dp</dimen>
<dimen name="storage_free_space_text_size">46sp</dimen> <dimen name="storage_free_space_text_size">46sp</dimen>
<dimen name="default_status_action_height">86dp</dimen>
</resources> </resources>

View File

@ -1,5 +1,5 @@
<resources> <resources>
<style name="AppTheme" parent="AppTheme.Base"/> <style name="AppTheme" parent="AppTheme.Base" />
</resources> </resources>