2022-04-28 17:19:02 -05:00
< template >
2023-01-29 13:19:06 -06:00
< div class = "w-full h-full px-8 py-8 overflow-y-auto" >
2023-01-08 15:32:15 -06:00
<!-- Display settings -- >
< p class = "uppercase text-xs font-semibold text-gray-300 mb-2" > User Interface Settings < / p >
2022-07-27 12:58:06 -05:00
< div class = "flex items-center py-3" @click ="toggleEnableAltView" >
< div class = "w-10 flex justify-center" >
2023-01-29 17:20:46 -06:00
< ui-toggle-switch v-model = "enableBookshelfView" @input="saveSettings" / >
2022-07-27 12:58:06 -05:00
< / div >
2023-01-29 17:20:46 -06:00
< p class = "pl-4" > Use bookshelf view < / p >
2022-07-27 12:58:06 -05:00
< / div >
2022-12-04 10:41:09 -06:00
< div class = "flex items-center py-3" @click.stop ="toggleLockOrientation" >
2023-01-08 15:38:34 -06:00
< div class = "w-10 flex justify-center pointer-events-none" >
< ui-toggle-switch v-model = "lockCurrentOrientation" / >
2022-12-04 10:41:09 -06:00
< / div >
< p class = "pl-4" > Lock orientation < / p >
< / div >
2023-01-08 15:32:15 -06:00
< div class = "py-3 flex items-center" >
2023-01-29 13:19:06 -06:00
< p class = "pr-4 w-36" > Haptic feedback < / p >
< div @click.stop ="showHapticFeedbackOptions" >
< ui-text-input :value = "hapticFeedbackOption" readonly append -icon = " expand_more " style = "max-width: 145px" / >
< / div >
2023-01-08 15:32:15 -06:00
< / div >
2022-08-07 09:13:10 -05:00
2023-01-08 15:32:15 -06:00
<!-- Playback settings -- >
2022-08-07 09:13:10 -05:00
< p class = "uppercase text-xs font-semibold text-gray-300 mb-2 mt-6" > Playback Settings < / p >
< div v-if = "!isiOS" class="flex items-center py-3" @click="toggleDisableAutoRewind" >
2022-07-27 18:21:10 -05:00
< div class = "w-10 flex justify-center" >
< ui-toggle-switch v-model = "settings.disableAutoRewind" @input="saveSettings" / >
< / div >
2022-08-07 09:13:10 -05:00
< p class = "pl-4" > Disable auto rewind < / p >
2022-07-27 18:21:10 -05:00
< / div >
2022-04-28 17:19:02 -05:00
< div class = "flex items-center py-3" @click ="toggleJumpBackwards" >
< div class = "w-10 flex justify-center" >
< span class = "material-icons text-4xl" > { { currentJumpBackwardsTimeIcon } } < / span >
< / div >
< p class = "pl-4" > Jump backwards time < / p >
< / div >
2022-07-01 20:05:11 -05:00
< div class = "flex items-center py-3" @click ="toggleJumpForward" >
2022-04-28 17:19:02 -05:00
< div class = "w-10 flex justify-center" >
2022-07-01 20:05:11 -05:00
< span class = "material-icons text-4xl" > { { currentJumpForwardTimeIcon } } < / span >
2022-04-28 17:19:02 -05:00
< / div >
< p class = "pl-4" > Jump forwards time < / p >
< / div >
2022-08-07 09:13:10 -05:00
2023-01-08 15:32:15 -06:00
<!-- Sleep timer settings -- >
2023-01-29 13:19:06 -06:00
< template v-if = "!isiOS" >
< p class = "uppercase text-xs font-semibold text-gray-300 mb-2 mt-6" > Sleep Timer Settings < / p >
< div class = "flex items-center py-3" @click ="toggleDisableShakeToResetSleepTimer" >
< div class = "w-10 flex justify-center" >
< ui-toggle-switch v-model = "settings.disableShakeToResetSleepTimer" @input="saveSettings" / >
< / div >
< p class = "pl-4" > Disable shake to reset < / p >
< span class = "material-icons-outlined ml-2" @click.stop ="showInfo('disableShakeToResetSleepTimer')" > info < / span >
< / div >
< div v-if = "!settings.disableShakeToResetSleepTimer" class="py-3 flex items-center" >
< p class = "pr-4 w-36" > Shake Sensitivity < / p >
< div @click.stop ="showShakeSensitivityOptions" >
< ui-text-input :value = "shakeSensitivityOption" readonly append -icon = " expand_more " style = "width: 145px; max-width: 145px" / >
< / div >
< / div >
2023-02-04 17:39:41 -06:00
< div class = "flex items-center py-3" @click ="toggleDisableSleepTimerFadeOut" >
< div class = "w-10 flex justify-center" >
< ui-toggle-switch v-model = "settings.disableSleepTimerFadeOut" @input="saveSettings" / >
< / div >
< p class = "pl-4" > Disable audio fade out < / p >
< span class = "material-icons-outlined ml-2" @click.stop ="showInfo('disableSleepTimerFadeOut')" > info < / span >
< / div >
2023-02-04 17:52:31 -06:00
< div class = "flex items-center py-3" @click ="toggleDisableSleepTimerResetFeedback" >
< div class = "w-10 flex justify-center" >
< ui-toggle-switch v-model = "settings.disableSleepTimerResetFeedback" @input="saveSettings" / >
< / div >
< p class = "pl-4" > Disable vibrate on reset < / p >
< span class = "material-icons-outlined ml-2" @click.stop ="showInfo('disableSleepTimerResetFeedback')" > info < / span >
< / div >
2023-01-29 13:19:06 -06:00
< div class = "flex items-center py-3" @click ="toggleAutoSleepTimer" >
< div class = "w-10 flex justify-center" >
< ui-toggle-switch v-model = "settings.autoSleepTimer" @input="saveSettings" / >
< / div >
< p class = "pl-4" > Auto Sleep Timer < / p >
< span class = "material-icons-outlined ml-2" @click.stop ="showInfo('autoSleepTimer')" > info < / span >
2022-08-07 09:13:10 -05:00
< / div >
2023-01-29 13:19:06 -06:00
< / template >
<!-- Auto Sleep timer settings -- >
< div v-if = "settings.autoSleepTimer" class="py-3 flex items-center" >
< p class = "pr-4 w-36" > Start Time < / p >
< ui-text-input type = "time" v-model = "settings.autoSleepTimerStartTime" style="width: 145px; max-width: 145px" @input="autoSleepTimerTimeUpdated" / >
2022-08-07 09:13:10 -05:00
< / div >
2023-01-29 13:19:06 -06:00
< div v-if = "settings.autoSleepTimer" class="py-3 flex items-center" >
< p class = "pr-4 w-36" > End Time < / p >
< ui-text-input type = "time" v-model = "settings.autoSleepTimerEndTime" style="width: 145px; max-width: 145px" @input="autoSleepTimerTimeUpdated" / >
2023-01-28 17:31:52 -06:00
< / div >
2023-01-29 13:19:06 -06:00
< div v-if = "settings.autoSleepTimer" class="py-3 flex items-center" >
< p class = "pr-4 w-36" > Sleep Timer < / p >
< div @click.stop ="showSleepTimerOptions" >
< ui-text-input :value = "sleepTimerLengthOption" readonly append -icon = " expand_more " style = "width: 145px; max-width: 145px" / >
< / div >
< / div >
< modals-dialog v-model = "showMoreMenuDialog" :items="moreMenuItems" @action="clickMenuAction" / >
< modals-sleep-timer-length-modal v-model = "showSleepTimerLengthModal" @change="sleepTimerLengthModalSelection" / >
2022-04-28 17:19:02 -05:00
< / div >
< / template >
< script >
2022-08-07 09:13:10 -05:00
import { Dialog } from '@capacitor/dialog'
2022-04-28 17:19:02 -05:00
export default {
data ( ) {
return {
2022-07-01 20:05:11 -05:00
deviceData : null ,
2023-01-29 13:19:06 -06:00
showMoreMenuDialog : false ,
showSleepTimerLengthModal : false ,
moreMenuSetting : '' ,
2022-04-28 17:19:02 -05:00
settings : {
disableAutoRewind : false ,
2022-07-27 12:58:06 -05:00
enableAltView : false ,
2022-07-01 20:05:11 -05:00
jumpForwardTime : 10 ,
2022-08-07 09:13:10 -05:00
jumpBackwardsTime : 10 ,
2022-12-04 10:41:09 -06:00
disableShakeToResetSleepTimer : false ,
2023-01-28 17:31:52 -06:00
shakeSensitivity : 'MEDIUM' ,
2023-01-08 15:32:15 -06:00
lockOrientation : 0 ,
2023-01-29 13:19:06 -06:00
hapticFeedback : 'LIGHT' ,
autoSleepTimer : false ,
autoSleepTimerStartTime : '22:00' ,
autoSleepTimerEndTime : '06:00' ,
2023-02-04 17:39:41 -06:00
sleepTimerLength : 900000 , // 15 minutes
2023-02-04 17:52:31 -06:00
disableSleepTimerFadeOut : false ,
disableSleepTimerResetFeedback : false
2022-08-07 09:13:10 -05:00
} ,
2023-01-29 13:19:06 -06:00
lockCurrentOrientation : false ,
2022-08-07 09:13:10 -05:00
settingInfo : {
disableShakeToResetSleepTimer : {
name : 'Disable shake to reset sleep timer' ,
2023-01-28 16:07:03 -06:00
message : 'Shaking your device while the timer is running OR within 2 minutes of the timer expiring will reset the sleep timer. Enable this setting to disable shake to reset.'
2023-01-29 13:19:06 -06:00
} ,
autoSleepTimer : {
name : 'Auto Sleep Timer' ,
message : 'When playing media between the specified start and end times a sleep timer will automatically start.'
2023-02-04 17:39:41 -06:00
} ,
disableSleepTimerFadeOut : {
name : 'Disable audio fade out' ,
message : 'Audio volume will start decreasing when there is less than 1 minute remaining on the sleep timer. Enable this setting to not fade out.'
2023-02-04 17:52:31 -06:00
} ,
disableSleepTimerResetFeedback : {
name : 'Disable vibrate on reset' ,
message : 'When the sleep timer gets reset your device will vibrate. Enable this setting to not vibrate when the sleep timer resets.'
2022-08-07 09:13:10 -05:00
}
2022-12-04 10:41:09 -06:00
} ,
2023-01-08 15:32:15 -06:00
hapticFeedbackItems : [
{
text : 'Off' ,
value : 'OFF'
} ,
{
text : 'Light' ,
value : 'LIGHT'
} ,
{
text : 'Medium' ,
value : 'MEDIUM'
} ,
{
text : 'Heavy' ,
value : 'HEAVY'
}
2023-01-28 17:31:52 -06:00
] ,
shakeSensitivityItems : [
{
text : 'Very Low' ,
value : 'VERY_LOW'
} ,
{
text : 'Low' ,
value : 'LOW'
} ,
{
text : 'Medium' ,
value : 'MEDIUM'
} ,
{
text : 'High' ,
value : 'HIGH'
} ,
{
text : 'Very High' ,
value : 'VERY_HIGH'
}
2023-01-08 15:32:15 -06:00
]
2022-04-28 17:19:02 -05:00
}
} ,
computed : {
2023-01-29 17:20:46 -06:00
// This is flipped because alt view was the default until v0.9.61-beta
enableBookshelfView : {
get ( ) {
return ! this . settings . enableAltView
} ,
set ( val ) {
this . settings . enableAltView = ! val
}
} ,
2022-08-07 09:13:10 -05:00
isiOS ( ) {
return this . $platform === 'ios'
} ,
2022-07-01 20:05:11 -05:00
jumpForwardItems ( ) {
return this . $store . state . globals . jumpForwardItems || [ ]
2022-04-28 17:19:02 -05:00
} ,
2022-07-01 20:05:11 -05:00
jumpBackwardsItems ( ) {
return this . $store . state . globals . jumpBackwardsItems || [ ]
} ,
currentJumpForwardTimeIcon ( ) {
return this . jumpForwardItems [ this . currentJumpForwardTimeIndex ] . icon
} ,
currentJumpForwardTimeIndex ( ) {
var index = this . jumpForwardItems . findIndex ( ( jfi ) => jfi . value === this . settings . jumpForwardTime )
return index >= 0 ? index : 1
2022-04-28 17:19:02 -05:00
} ,
currentJumpBackwardsTimeIcon ( ) {
return this . jumpBackwardsItems [ this . currentJumpBackwardsTimeIndex ] . icon
} ,
currentJumpBackwardsTimeIndex ( ) {
2022-07-01 20:05:11 -05:00
var index = this . jumpBackwardsItems . findIndex ( ( jfi ) => jfi . value === this . settings . jumpBackwardsTime )
return index >= 0 ? index : 1
2023-01-29 13:19:06 -06:00
} ,
shakeSensitivityOption ( ) {
const item = this . shakeSensitivityItems . find ( ( i ) => i . value === this . settings . shakeSensitivity )
return item ? item . text : 'Error'
} ,
hapticFeedbackOption ( ) {
const item = this . hapticFeedbackItems . find ( ( i ) => i . value === this . settings . hapticFeedback )
return item ? item . text : 'Error'
} ,
sleepTimerLengthOption ( ) {
if ( ! this . settings . sleepTimerLength ) return 'End of Chapter'
const minutes = Number ( this . settings . sleepTimerLength ) / 1000 / 60
return ` ${ minutes } min `
} ,
moreMenuItems ( ) {
if ( this . moreMenuSetting === 'shakeSensitivity' ) return this . shakeSensitivityItems
else if ( this . moreMenuSetting === 'hapticFeedback' ) return this . hapticFeedbackItems
return [ ]
2022-04-28 17:19:02 -05:00
}
} ,
methods : {
2023-01-29 13:19:06 -06:00
sleepTimerLengthModalSelection ( value ) {
this . settings . sleepTimerLength = value
this . saveSettings ( )
} ,
showSleepTimerOptions ( ) {
this . showSleepTimerLengthModal = true
} ,
showHapticFeedbackOptions ( ) {
this . moreMenuSetting = 'hapticFeedback'
this . showMoreMenuDialog = true
} ,
showShakeSensitivityOptions ( ) {
this . moreMenuSetting = 'shakeSensitivity'
this . showMoreMenuDialog = true
} ,
clickMenuAction ( action ) {
this . showMoreMenuDialog = false
if ( this . moreMenuSetting === 'shakeSensitivity' ) {
this . settings . shakeSensitivity = action
this . saveSettings ( )
} else if ( this . moreMenuSetting === 'hapticFeedback' ) {
this . settings . hapticFeedback = action
this . hapticFeedbackUpdated ( action )
}
} ,
autoSleepTimerTimeUpdated ( val ) {
console . log ( '[settings] Auto sleep timer time=' , val )
if ( ! val ) return // invalid times return falsy
2023-01-28 17:31:52 -06:00
this . saveSettings ( )
} ,
2023-01-08 15:32:15 -06:00
hapticFeedbackUpdated ( val ) {
this . $store . commit ( 'globals/setHapticFeedback' , val )
this . saveSettings ( )
} ,
2022-08-07 09:13:10 -05:00
showInfo ( setting ) {
if ( this . settingInfo [ setting ] ) {
Dialog . alert ( {
title : this . settingInfo [ setting ] . name ,
message : this . settingInfo [ setting ] . message
} )
}
} ,
2023-01-29 13:19:06 -06:00
toggleAutoSleepTimer ( ) {
this . settings . autoSleepTimer = ! this . settings . autoSleepTimer
this . saveSettings ( )
} ,
2023-02-04 17:39:41 -06:00
toggleDisableSleepTimerFadeOut ( ) {
this . settings . disableSleepTimerFadeOut = ! this . settings . disableSleepTimerFadeOut
this . saveSettings ( )
} ,
2022-08-07 09:13:10 -05:00
toggleDisableShakeToResetSleepTimer ( ) {
this . settings . disableShakeToResetSleepTimer = ! this . settings . disableShakeToResetSleepTimer
this . saveSettings ( )
} ,
2023-02-04 17:52:31 -06:00
toggleDisableSleepTimerResetFeedback ( ) {
this . settings . disableSleepTimerResetFeedback = ! this . settings . disableSleepTimerResetFeedback
this . saveSettings ( )
} ,
2022-04-28 17:19:02 -05:00
toggleDisableAutoRewind ( ) {
this . settings . disableAutoRewind = ! this . settings . disableAutoRewind
this . saveSettings ( )
} ,
2022-07-27 12:58:06 -05:00
toggleEnableAltView ( ) {
this . settings . enableAltView = ! this . settings . enableAltView
this . saveSettings ( )
} ,
2022-12-04 10:41:09 -06:00
getCurrentOrientation ( ) {
const orientation = window . screen ? window . screen . orientation || { } : { }
const type = orientation . type || ''
if ( type . includes ( 'landscape' ) ) return 'LANDSCAPE'
return 'PORTRAIT' // default
} ,
toggleLockOrientation ( ) {
this . lockCurrentOrientation = ! this . lockCurrentOrientation
if ( this . lockCurrentOrientation ) {
this . settings . lockOrientation = this . getCurrentOrientation ( )
} else {
this . settings . lockOrientation = 'NONE'
}
this . $setOrientationLock ( this . settings . lockOrientation )
this . saveSettings ( )
} ,
2022-07-01 20:05:11 -05:00
toggleJumpForward ( ) {
var next = ( this . currentJumpForwardTimeIndex + 1 ) % 3
this . settings . jumpForwardTime = this . jumpForwardItems [ next ] . value
2022-04-28 17:19:02 -05:00
this . saveSettings ( )
} ,
toggleJumpBackwards ( ) {
var next = ( this . currentJumpBackwardsTimeIndex + 4 ) % 3
if ( next > 2 ) return
this . settings . jumpBackwardsTime = this . jumpBackwardsItems [ next ] . value
this . saveSettings ( )
} ,
2022-07-01 20:05:11 -05:00
async saveSettings ( ) {
2023-01-08 15:32:15 -06:00
await this . $hapticsImpact ( )
2022-07-01 20:05:11 -05:00
const updatedDeviceData = await this . $db . updateDeviceSettings ( { ... this . settings } )
if ( updatedDeviceData ) {
this . $store . commit ( 'setDeviceData' , updatedDeviceData )
this . init ( )
}
} ,
async init ( ) {
this . deviceData = await this . $db . getDeviceData ( )
this . $store . commit ( 'setDeviceData' , this . deviceData )
const deviceSettings = this . deviceData . deviceSettings || { }
this . settings . disableAutoRewind = ! ! deviceSettings . disableAutoRewind
2022-07-27 12:58:06 -05:00
this . settings . enableAltView = ! ! deviceSettings . enableAltView
2022-07-01 20:05:11 -05:00
this . settings . jumpForwardTime = deviceSettings . jumpForwardTime || 10
this . settings . jumpBackwardsTime = deviceSettings . jumpBackwardsTime || 10
2022-12-04 10:41:09 -06:00
this . settings . lockOrientation = deviceSettings . lockOrientation || 'NONE'
this . lockCurrentOrientation = this . settings . lockOrientation !== 'NONE'
2023-01-08 15:32:15 -06:00
this . settings . hapticFeedback = deviceSettings . hapticFeedback || 'LIGHT'
2023-01-29 13:19:06 -06:00
this . settings . disableShakeToResetSleepTimer = ! ! deviceSettings . disableShakeToResetSleepTimer
this . settings . shakeSensitivity = deviceSettings . shakeSensitivity || 'MEDIUM'
this . settings . autoSleepTimer = ! ! deviceSettings . autoSleepTimer
this . settings . autoSleepTimerStartTime = deviceSettings . autoSleepTimerStartTime || '22:00'
this . settings . autoSleepTimerEndTime = deviceSettings . autoSleepTimerEndTime || '06:00'
this . settings . sleepTimerLength = ! isNaN ( deviceSettings . sleepTimerLength ) ? deviceSettings . sleepTimerLength : 900000 // 15 minutes
2023-02-04 17:39:41 -06:00
this . settings . disableSleepTimerFadeOut = ! ! deviceSettings . disableSleepTimerFadeOut
2023-02-04 17:52:31 -06:00
this . settings . disableSleepTimerResetFeedback = ! ! deviceSettings . disableSleepTimerResetFeedback
2022-04-28 17:19:02 -05:00
}
} ,
mounted ( ) {
2022-07-01 20:05:11 -05:00
this . init ( )
2022-04-28 17:19:02 -05:00
}
}
2022-12-08 00:28:28 -05:00
< / script >