add a button at fullscreen media for locking screen orientation

This commit is contained in:
tibbi 2017-11-08 21:10:43 +01:00
parent 1a3d52e1c2
commit b41f1e97e6
2 changed files with 40 additions and 14 deletions

View file

@ -66,6 +66,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
private var mSlideshowMoveBackwards = false
private var mSlideshowMedia = mutableListOf<Medium>()
private var mAreSlideShowMediaVisible = false
private var mIsOrientationLocked = false
private var mStoredUseEnglish = false
@ -110,12 +111,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
window.attributes = attributes
}
if (config.screenRotation == ROTATE_BY_DEVICE_ROTATION && mOrientationEventListener?.canDetectOrientation() == true) {
mOrientationEventListener?.enable()
} else if (config.screenRotation == ROTATE_BY_SYSTEM_SETTING) {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
}
setupRotation()
invalidateOptionsMenu()
}
@ -214,6 +210,18 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
}
}
private fun setupRotation() {
if (mIsOrientationLocked) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LOCKED
}
} else if (config.screenRotation == ROTATE_BY_DEVICE_ROTATION && mOrientationEventListener?.canDetectOrientation() == true) {
mOrientationEventListener?.enable()
} else if (config.screenRotation == ROTATE_BY_SYSTEM_SETTING) {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
}
}
private fun setupOrientationEventListener() {
mOrientationEventListener = object : OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL) {
override fun onOrientationChanged(orientation: Int) {
@ -223,7 +231,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
else -> ORIENT_PORTRAIT
}
if (mLastHandledOrientation != currOrient) {
if (!mIsOrientationLocked && mLastHandledOrientation != currOrient) {
mLastHandledOrientation = currOrient
requestedOrientation = when (currOrient) {
@ -247,6 +255,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
findItem(R.id.menu_save_as).isVisible = mRotationDegrees != 0f
findItem(R.id.menu_hide).isVisible = !currentMedium.name.startsWith('.')
findItem(R.id.menu_unhide).isVisible = currentMedium.name.startsWith('.')
findItem(R.id.menu_lock_orientation).title = getString(if (mIsOrientationLocked) R.string.unlock_orientation else R.string.lock_orientation)
findItem(R.id.menu_rotate).setShowAsAction(
if (mRotationDegrees != 0f) {
MenuItem.SHOW_AS_ACTION_ALWAYS
@ -264,7 +273,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
when (item.itemId) {
R.id.menu_set_as -> setAs(Uri.fromFile(getCurrentFile()))
R.id.slideshow -> initSlideshow()
R.id.menu_slideshow -> initSlideshow()
R.id.menu_copy_to -> copyMoveTo(true)
R.id.menu_move_to -> copyMoveTo(false)
R.id.menu_open_with -> openFile(Uri.fromFile(getCurrentFile()), true)
@ -276,10 +285,11 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
R.id.menu_rename -> renameFile()
R.id.menu_edit -> openEditor(Uri.fromFile(getCurrentFile()))
R.id.menu_properties -> showProperties()
R.id.show_on_map -> showOnMap()
R.id.menu_show_on_map -> showOnMap()
R.id.menu_rotate -> rotateImage()
R.id.menu_lock_orientation -> toggleLockOrientation()
R.id.menu_save_as -> saveImageAs()
R.id.settings -> launchSettings()
R.id.menu_settings -> launchSettings()
else -> return super.onOptionsItemSelected(item)
}
return true
@ -467,6 +477,18 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
supportInvalidateOptionsMenu()
}
private fun toggleLockOrientation() {
mIsOrientationLocked = !mIsOrientationLocked
if (mIsOrientationLocked) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LOCKED
}
} else {
setupRotation()
}
invalidateOptionsMenu()
}
private fun saveImageAs() {
val currPath = getCurrentPath()
SaveAsDialog(this, currPath, false) {
@ -756,7 +778,7 @@ class ViewPagerActivity : SimpleActivity(), ViewPager.OnPageChangeListener, View
}
private fun checkOrientation() {
if (config.screenRotation == ROTATE_BY_ASPECT_RATIO) {
if (!mIsOrientationLocked && config.screenRotation == ROTATE_BY_ASPECT_RATIO) {
val res = getCurrentFile().getResolution()
if (res.x > res.y) {
requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE

View file

@ -29,7 +29,11 @@
android:visible="false"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/slideshow"
android:id="@+id/menu_lock_orientation"
android:title="@string/lock_orientation"
app:showAsAction="never"/>
<item
android:id="@+id/menu_slideshow"
android:title="@string/slideshow"
app:showAsAction="never"/>
<item
@ -72,11 +76,11 @@
android:title="@string/properties"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/show_on_map"
android:id="@+id/menu_show_on_map"
android:title="@string/show_on_map"
app:showAsAction="never"/>
<item
android:id="@+id/settings"
android:id="@+id/menu_settings"
android:title="@string/settings"
app:showAsAction="never"/>
</menu>