Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.kapt' apply false
id 'kotlin-android'
id "androidx.navigation.safeargs.kotlin"
id 'com.mikepenz.aboutlibraries.plugin'
id 'kotlin-parcelize'
}

android {
Expand Down
17 changes: 12 additions & 5 deletions app/src/main/java/com/klee/volumelockr/service/VolumeProvider.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@ import com.klee.volumelockr.ui.Volume

class VolumeProvider(private val mContext: Context) {

companion object {
const val MIN_MUSIC_VOLUME = 0
const val MIN_CALL_VOLUME = 1
const val MIN_NOTIFICATION_VOLUME = 0
const val MIN_ALARM_VOLUME = 1
}

private val mAudioManager = mContext.getSystemService(Context.AUDIO_SERVICE) as AudioManager

fun getVolumes(): List<Volume> {
Expand All @@ -16,7 +23,7 @@ class VolumeProvider(private val mContext: Context) {
resource.getString(R.string.media_title),
AudioManager.STREAM_MUSIC,
fetchVolume(AudioManager.STREAM_MUSIC),
0,
MIN_MUSIC_VOLUME,
fetchMaxVolume(AudioManager.STREAM_MUSIC),
false
),
Expand All @@ -25,7 +32,7 @@ class VolumeProvider(private val mContext: Context) {
resource.getString(R.string.call_title),
AudioManager.STREAM_VOICE_CALL,
fetchVolume(AudioManager.STREAM_VOICE_CALL),
1,
MIN_CALL_VOLUME,
fetchMaxVolume(AudioManager.STREAM_VOICE_CALL),
false
),
Expand All @@ -34,7 +41,7 @@ class VolumeProvider(private val mContext: Context) {
resource.getString(R.string.notification_title),
AudioManager.STREAM_NOTIFICATION,
fetchVolume(AudioManager.STREAM_NOTIFICATION),
0,
MIN_NOTIFICATION_VOLUME,
fetchMaxVolume(AudioManager.STREAM_NOTIFICATION),
false
),
Expand All @@ -43,7 +50,7 @@ class VolumeProvider(private val mContext: Context) {
resource.getString(R.string.alarm_title),
AudioManager.STREAM_ALARM,
fetchVolume(AudioManager.STREAM_ALARM),
1,
MIN_ALARM_VOLUME,
fetchMaxVolume(AudioManager.STREAM_ALARM),
false
)
Expand All @@ -54,7 +61,7 @@ class VolumeProvider(private val mContext: Context) {
return mAudioManager.getStreamVolume(volume)
}

private fun fetchMaxVolume(volume: Int): Int {
fun fetchMaxVolume(volume: Int): Int {
return mAudioManager.getStreamMaxVolume(volume)
}
}
118 changes: 113 additions & 5 deletions app/src/main/java/com/klee/volumelockr/service/VolumeService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@ import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.klee.volumelockr.R
import com.klee.volumelockr.ui.MainActivity
import com.klee.volumelockr.ui.SettingsFragment
import com.klee.volumelockr.ui.SettingsFragment.Companion.ALLOW_LOWER_PREFERENCE
import com.klee.volumelockr.ui.Volume
import java.util.Timer
import java.util.TimerTask

class VolumeService : Service() {
class VolumeService() : Service() {

companion object {
const val NOTIFICATION_TITLE = "VolumeLockr"
Expand Down Expand Up @@ -77,12 +77,13 @@ class VolumeService : Service() {
private var mAllowLower = false
private var mAllowLowerListener: (() -> Unit)? = null

private var mVolumePreset: HashMap<Int, Int> = hashMapOf<Int, Int>()

override fun onCreate() {
super.onCreate()

mAudioManager = getSystemService(AUDIO_SERVICE) as AudioManager
mVolumeProvider = VolumeProvider(this)

loadPreferences()

registerObservers()
Expand All @@ -109,6 +110,54 @@ class VolumeService : Service() {
}

fun getVolumes(): List<Volume> = mVolumeProvider.getVolumes()
fun getVolumesPresets(): List<Volume> {
val volumes = mVolumeProvider.getVolumes()
volumes.forEach { volume ->
volume.value = mVolumePreset[volume.stream] ?: getSavedVolumePreset(volume.stream)
}
return volumes
}
Comment thread
coderabbitai[bot] marked this conversation as resolved.

private fun getSavedVolumePreset(stream: Int): Int {
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

when (stream) {
AudioManager.STREAM_MUSIC -> return sharedPreferences.getInt(
SettingsFragment.MEDIA_VOLUME_PRESET_PREFERENCE,
VolumeProvider.MIN_MUSIC_VOLUME
).coerceIn(
VolumeProvider.MIN_MUSIC_VOLUME,
mVolumeProvider.fetchMaxVolume(AudioManager.STREAM_MUSIC)
)

AudioManager.STREAM_VOICE_CALL -> return sharedPreferences.getInt(
SettingsFragment.CALL_VOLUME_PRESET_PREFERENCE,
VolumeProvider.MIN_CALL_VOLUME
).coerceIn(
VolumeProvider.MIN_CALL_VOLUME,
mVolumeProvider.fetchMaxVolume(AudioManager.STREAM_VOICE_CALL)
)

AudioManager.STREAM_NOTIFICATION -> return sharedPreferences.getInt(
SettingsFragment.NOTIFICATION_VOLUME_PRESET_PREFERENCE,
VolumeProvider.MIN_NOTIFICATION_VOLUME
).coerceIn(
VolumeProvider.MIN_NOTIFICATION_VOLUME, mVolumeProvider.fetchMaxVolume(
AudioManager.STREAM_NOTIFICATION
)
)

AudioManager.STREAM_ALARM -> return sharedPreferences.getInt(
SettingsFragment.ALARM_VOLUME_PRESET_PREFERENCE,
VolumeProvider.MIN_ALARM_VOLUME
).coerceIn(
VolumeProvider.MIN_ALARM_VOLUME,
mVolumeProvider.fetchMaxVolume(AudioManager.STREAM_ALARM)
)

else -> return 1
}
}

@Synchronized
fun startLocking() {
Expand Down Expand Up @@ -152,11 +201,64 @@ class VolumeService : Service() {
}

@Synchronized
fun addLock(stream: Int, volume: Int) {
mVolumeLock[stream] = volume
fun addLock(stream: Int, volume: Int, fromLockAll: Boolean) {
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
val usePresetsOnLockAll =
sharedPreferences.getBoolean(SettingsFragment.USE_PRESETS_ALL_PREFERENCE, false)
val usePresetsOnLockSingle =
sharedPreferences.getBoolean(SettingsFragment.USE_PRESETS_INDIVIDUAL_PREFERENCE, false)
var presetVolumeLevel: Int
if (usePresetsOnLockAll || usePresetsOnLockSingle) {
if ((usePresetsOnLockAll && fromLockAll) || (usePresetsOnLockSingle && !fromLockAll)) {
presetVolumeLevel = getPresetVolumeForLockedStream(stream)
} else presetVolumeLevel = -1
} else presetVolumeLevel = -1

mVolumeLock[stream] = if (presetVolumeLevel >= 0) presetVolumeLevel else volume
savePreferences()
}

fun getPresetVolumeForLockedStream(stream: Int): Int {
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

when (stream) {
AudioManager.STREAM_MUSIC -> return sharedPreferences.getInt(
SettingsFragment.MEDIA_VOLUME_PRESET_PREFERENCE,
VolumeProvider.MIN_MUSIC_VOLUME
).coerceIn(
VolumeProvider.MIN_MUSIC_VOLUME,
mVolumeProvider.fetchMaxVolume(AudioManager.STREAM_MUSIC)
)

AudioManager.STREAM_VOICE_CALL -> return sharedPreferences.getInt(
SettingsFragment.CALL_VOLUME_PRESET_PREFERENCE,
VolumeProvider.MIN_CALL_VOLUME
).coerceIn(
VolumeProvider.MIN_CALL_VOLUME,
mVolumeProvider.fetchMaxVolume(AudioManager.STREAM_VOICE_CALL)
)

AudioManager.STREAM_NOTIFICATION -> return sharedPreferences.getInt(
SettingsFragment.NOTIFICATION_VOLUME_PRESET_PREFERENCE,
VolumeProvider.MIN_NOTIFICATION_VOLUME
).coerceIn(
VolumeProvider.MIN_NOTIFICATION_VOLUME, mVolumeProvider.fetchMaxVolume(
AudioManager.STREAM_NOTIFICATION
)
)

AudioManager.STREAM_ALARM -> return sharedPreferences.getInt(
SettingsFragment.ALARM_VOLUME_PRESET_PREFERENCE,
VolumeProvider.MIN_ALARM_VOLUME
).coerceIn(
VolumeProvider.MIN_ALARM_VOLUME,
mVolumeProvider.fetchMaxVolume(AudioManager.STREAM_ALARM)
)

else -> return 1
}
}

@Synchronized
fun removeLock(stream: Int) {
mVolumeLock.remove(stream)
Expand All @@ -181,7 +283,9 @@ class VolumeService : Service() {

private fun loadPreferences() {
val sharedPreferences = getSharedPreferences(APP_SHARED_PREFERENCES, MODE_PRIVATE)

class Token : TypeToken<HashMap<Int, Int>>()

val value = sharedPreferences.getString(LOCKS_KEY, "")
if (value.isNullOrBlank()) {
return
Expand Down Expand Up @@ -331,6 +435,10 @@ class VolumeService : Service() {
return error.javaClass.name == "android.app.ForegroundServiceStartNotAllowedException"
}

fun setVolumePreset(stream: Int, volume: Int) {
mVolumePreset[stream] = volume
}

inner class LocalBinder : Binder() {
fun getService(): VolumeService = this@VolumeService
}
Expand Down
Loading