mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2025-08-04 01:54:33 +02:00
Add:Android auto sleep timer #260
This commit is contained in:
parent
479de5f067
commit
31531197a2
13 changed files with 346 additions and 43 deletions
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<div class="w-full h-full px-8 pt-8 pb-48 overflow-y-auto">
|
||||
<div class="w-full h-full px-8 py-8 overflow-y-auto">
|
||||
<!-- Display settings -->
|
||||
<p class="uppercase text-xs font-semibold text-gray-300 mb-2">User Interface Settings</p>
|
||||
<div class="flex items-center py-3" @click="toggleEnableAltView">
|
||||
|
@ -15,8 +15,10 @@
|
|||
<p class="pl-4">Lock orientation</p>
|
||||
</div>
|
||||
<div class="py-3 flex items-center">
|
||||
<p class="pr-4">Haptic feedback</p>
|
||||
<ui-dropdown v-model="settings.hapticFeedback" :items="hapticFeedbackItems" style="max-width: 105px" @input="hapticFeedbackUpdated" />
|
||||
<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>
|
||||
</div>
|
||||
|
||||
<!-- Playback settings -->
|
||||
|
@ -41,18 +43,47 @@
|
|||
</div>
|
||||
|
||||
<!-- Sleep timer settings -->
|
||||
<p v-if="!isiOS" class="uppercase text-xs font-semibold text-gray-300 mb-2 mt-6">Sleep Timer Settings</p>
|
||||
<div v-if="!isiOS" class="flex items-center py-3" @click="toggleDisableShakeToResetSleepTimer">
|
||||
<div class="w-10 flex justify-center">
|
||||
<ui-toggle-switch v-model="settings.disableShakeToResetSleepTimer" @input="saveSettings" />
|
||||
<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>
|
||||
<p class="pl-4">Disable shake to reset</p>
|
||||
<span class="material-icons-outlined ml-2" @click.stop="showInfo('disableShakeToResetSleepTimer')">info</span>
|
||||
<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>
|
||||
<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>
|
||||
</div>
|
||||
</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" />
|
||||
</div>
|
||||
<div v-if="!isiOS && !settings.disableShakeToResetSleepTimer" class="py-3 flex items-center">
|
||||
<p class="pr-4">Shake Sensitivity</p>
|
||||
<ui-dropdown v-model="settings.shakeSensitivity" :items="shakeSensitivityItems" style="max-width: 125px" @input="sensitivityUpdated" />
|
||||
<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" />
|
||||
</div>
|
||||
<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" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
@ -63,6 +94,9 @@ export default {
|
|||
data() {
|
||||
return {
|
||||
deviceData: null,
|
||||
showMoreMenuDialog: false,
|
||||
showSleepTimerLengthModal: false,
|
||||
moreMenuSetting: '',
|
||||
settings: {
|
||||
disableAutoRewind: false,
|
||||
enableAltView: false,
|
||||
|
@ -71,15 +105,23 @@ export default {
|
|||
disableShakeToResetSleepTimer: false,
|
||||
shakeSensitivity: 'MEDIUM',
|
||||
lockOrientation: 0,
|
||||
hapticFeedback: 'LIGHT'
|
||||
hapticFeedback: 'LIGHT',
|
||||
autoSleepTimer: false,
|
||||
autoSleepTimerStartTime: '22:00',
|
||||
autoSleepTimerEndTime: '06:00',
|
||||
sleepTimerLength: 900000 // 15 minutes
|
||||
},
|
||||
lockCurrentOrientation: false,
|
||||
settingInfo: {
|
||||
disableShakeToResetSleepTimer: {
|
||||
name: 'Disable shake to reset sleep timer',
|
||||
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.'
|
||||
},
|
||||
autoSleepTimer: {
|
||||
name: 'Auto Sleep Timer',
|
||||
message: 'When playing media between the specified start and end times a sleep timer will automatically start.'
|
||||
}
|
||||
},
|
||||
lockCurrentOrientation: false,
|
||||
hapticFeedbackItems: [
|
||||
{
|
||||
text: 'Off',
|
||||
|
@ -145,10 +187,55 @@ export default {
|
|||
currentJumpBackwardsTimeIndex() {
|
||||
var index = this.jumpBackwardsItems.findIndex((jfi) => jfi.value === this.settings.jumpBackwardsTime)
|
||||
return index >= 0 ? index : 1
|
||||
},
|
||||
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 []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
sensitivityUpdated(val) {
|
||||
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
|
||||
this.saveSettings()
|
||||
},
|
||||
hapticFeedbackUpdated(val) {
|
||||
|
@ -163,6 +250,10 @@ export default {
|
|||
})
|
||||
}
|
||||
},
|
||||
toggleAutoSleepTimer() {
|
||||
this.settings.autoSleepTimer = !this.settings.autoSleepTimer
|
||||
this.saveSettings()
|
||||
},
|
||||
toggleDisableShakeToResetSleepTimer() {
|
||||
this.settings.disableShakeToResetSleepTimer = !this.settings.disableShakeToResetSleepTimer
|
||||
this.saveSettings()
|
||||
|
@ -220,11 +311,16 @@ export default {
|
|||
this.settings.enableAltView = !!deviceSettings.enableAltView
|
||||
this.settings.jumpForwardTime = deviceSettings.jumpForwardTime || 10
|
||||
this.settings.jumpBackwardsTime = deviceSettings.jumpBackwardsTime || 10
|
||||
this.settings.disableShakeToResetSleepTimer = !!deviceSettings.disableShakeToResetSleepTimer
|
||||
this.settings.shakeSensitivity = deviceSettings.shakeSensitivity || 'MEDIUM'
|
||||
this.settings.lockOrientation = deviceSettings.lockOrientation || 'NONE'
|
||||
this.lockCurrentOrientation = this.settings.lockOrientation !== 'NONE'
|
||||
this.settings.hapticFeedback = deviceSettings.hapticFeedback || 'LIGHT'
|
||||
|
||||
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
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue