Skip to content
Merged
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
149 changes: 81 additions & 68 deletions app/src/main/kotlin/com/cyb3rko/flashdim/quicksettings/SettingsTile.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,24 +29,7 @@ import com.cyb3rko.flashdim.utils.Safe
class SettingsTile : TileService() {
private var cameraManager: CameraManager? = null
private var description = ""

override fun onClick() {
if (qsTile.state == Tile.STATE_UNAVAILABLE) return

var toggleMode = false
try {
Safe.initialize(applicationContext)
toggleMode = Safe.getBoolean(Safe.QUICKTILE_TOGGLE_MODE, true)
} catch (_: Exception) {
Log.e("FlashDim", "Safe operations failed in SettingsTile")
}

if (toggleMode) {
actAsToggle()
} else {
actAsDimmer()
}
}
private var enabled = false

override fun onStartListening() {
super.onStartListening()
Expand Down Expand Up @@ -74,6 +57,41 @@ class SettingsTile : TileService() {
cameraManager = null
}

override fun onClick() {
if (qsTile.state == Tile.STATE_UNAVAILABLE) return

var toggleMode = false
try {
Safe.initialize(applicationContext)
toggleMode = Safe.getBoolean(Safe.QUICKTILE_TOGGLE_MODE, true)
} catch (_: Exception) {
Log.e("FlashDim", "Safe operations failed in SettingsTile")
}

if (toggleMode) {
actAsToggle()
} else {
actAsDimmer()
}
}

private fun initAsToggle() {
Log.d("FlashDim", "Initializing SettingsTile (toggle)")
cameraManager?.registerTorchCallback(
object : TorchCallback() {
override fun onTorchModeChanged(cameraId: String, enabled: Boolean) {
if (qsTile == null) return
Safe.initialize(applicationContext)
Safe.writeBoolean(Safe.FLASH_ACTIVE, enabled)
this@SettingsTile.enabled = enabled
qsTile.state = if (enabled) Tile.STATE_ACTIVE else Tile.STATE_INACTIVE
qsTile.updateTile()
}
},
Handler(Looper.getMainLooper())
)
}

private fun initAsDimmer() {
Log.d("FlashDim", "Initializing SettingsTile (dimmer)")
if (Safe.getInt(Safe.MAX_LEVEL, -1) < 2) {
Expand All @@ -86,7 +104,7 @@ class SettingsTile : TileService() {
object : TorchCallback() {
override fun onTorchModeChanged(cameraId: String, enabled: Boolean) {
if (qsTile == null) return
if (description.isNotEmpty()) qsTile.subtitle = "State: $description"
this@SettingsTile.enabled = enabled
qsTile.state = if (enabled) Tile.STATE_ACTIVE else Tile.STATE_INACTIVE
qsTile.updateTile()
}
Expand All @@ -96,30 +114,50 @@ class SettingsTile : TileService() {
}
}

private fun initAsToggle() {
Log.d("FlashDim", "Initializing SettingsTile (toggle)")
cameraManager?.registerTorchCallback(
object : TorchCallback() {
override fun onTorchModeChanged(cameraId: String, enabled: Boolean) {
if (qsTile == null) return
Safe.initialize(applicationContext)
Safe.writeBoolean(Safe.FLASH_ACTIVE, enabled)
qsTile.state = if (enabled) Tile.STATE_ACTIVE else Tile.STATE_INACTIVE
qsTile.updateTile()
private fun actAsToggle() {
var level = -1
try {
if (Safe.getBoolean(Safe.QUICK_SETTINGS_LINK, false)) {
level = Safe.getInt(Safe.INITIAL_LEVEL, 1)
}
} catch (_: Exception) {
Log.e("FlashDim", "Safe operations failed in SettingsTile")
}

qsTile.subtitle = null
try {
if (cameraManager == null) {
Log.d("FlashDim", "Initializing CameraManager from SettingsTile (toggle)")
cameraManager = getSystemService(CAMERA_SERVICE) as CameraManager
}
cameraManager?.let {
Log.d("FlashDim", "Toggling flashlight from SettingsTile (toggle)")
when (qsTile.state) {
Tile.STATE_INACTIVE -> sendFlashlightSignal(it, level, true)
Tile.STATE_ACTIVE -> sendFlashlightSignal(it, level, false)
}
},
Handler(Looper.getMainLooper())
)
}
} catch (e: Exception) {
Log.e("FlashDim", "Camera access failed in SettingsFilel (toggle)")
handleFlashlightException(e)
e.printStackTrace()
}
}

private fun actAsDimmer() {
var stage = 0
try {
stage = Safe.getInt(Safe.QUICKTILE_DIM_STAGE, DIMMER_MIN)
description = stage.description()
} catch (_: Exception) {
Log.e("FlashDim", "Safe operations failed in SettingsTile")
var stage: Int
if (!enabled) {
// torch was disabled externally, continue again from initial state
stage = DIMMER_MIN
} else {
try {
stage = Safe.getInt(Safe.QUICKTILE_DIM_STAGE, DIMMER_MIN)
} catch (_: Exception) {
Log.e("FlashDim", "Safe operations failed in SettingsTile")
stage = DIMMER_MIN
}
}
description = stage.description()

val maxLevel = Safe.getInt(Safe.MAX_LEVEL, -1)
val newLevel = when (stage) {
Expand All @@ -144,40 +182,15 @@ class SettingsTile : TileService() {
handleFlashlightException(e)
e.printStackTrace()
}
qsTile.subtitle = "State: ${stage.description()}"
qsTile.subtitle = if (!enabled) {
"State: ${DIMMER_MIN.description()}"
} else {
"State: $description"
}
qsTile.updateTile()
Safe.writeInt(Safe.QUICKTILE_DIM_STAGE, stage.next())
}

private fun actAsToggle() {
var level = -1
try {
if (Safe.getBoolean(Safe.QUICK_SETTINGS_LINK, false)) {
level = Safe.getInt(Safe.INITIAL_LEVEL, 1)
}
} catch (_: Exception) {
Log.e("FlashDim", "Safe operations failed in SettingsTile")
}

try {
if (cameraManager == null) {
Log.d("FlashDim", "Initializing CameraManager from SettingsTile (toggle)")
cameraManager = getSystemService(CAMERA_SERVICE) as CameraManager
}
cameraManager?.let {
Log.d("FlashDim", "Toggling flashlight from SettingsTile (toggle)")
when (qsTile.state) {
Tile.STATE_INACTIVE -> sendFlashlightSignal(it, level, true)
Tile.STATE_ACTIVE -> sendFlashlightSignal(it, level, false)
}
}
} catch (e: Exception) {
Log.e("FlashDim", "Camera access failed in SettingsFilel (toggle)")
handleFlashlightException(e)
e.printStackTrace()
}
}

private fun sendFlashlightSignal(cameraManager: CameraManager, level: Int, activate: Boolean) {
if (activate) {
if (level == -1) {
Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/xml/preferences.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

<SwitchPreferenceCompat
app:key="quick_settings_toggle"
app:defaultValue="false"
app:defaultValue="true"
app:title="@string/preference_item_quick_settings_simple"
app:summary="@string/preference_item_quick_settings_simple_summary"
app:icon="@drawable/ic_link_scaled" />
Expand Down