Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added onyx note air3c #471

Closed
wants to merge 2 commits into from
Closed
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/src/main/java/org/koreader/launcher/TestActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import org.koreader.launcher.device.epd.NGL4EPDController
import org.koreader.launcher.device.lights.OnyxC67Controller
import org.koreader.launcher.device.lights.OnyxColorController
import org.koreader.launcher.device.lights.OnyxSdkLightsController
import org.koreader.launcher.device.lights.OnyxSdk2LightsController
import org.koreader.launcher.device.lights.OnyxWarmthController
import org.koreader.launcher.device.lights.TolinoRootController
import org.koreader.launcher.device.lights.TolinoNtxController
Expand Down Expand Up @@ -71,6 +72,7 @@ class TestActivity: AppCompatActivity() {
lightsMap["Onyx C67"] = OnyxC67Controller()
lightsMap["Onyx Color"] = OnyxColorController()
lightsMap["Onyx SDK (lights)"] = OnyxSdkLightsController()
lightsMap["Onyx SDK2 (lights)"] = OnyxSdk2LightsController()
lightsMap["Onyx (warmth)"] = OnyxWarmthController()
lightsMap["Tolino Root"] = TolinoRootController()
lightsMap["Tolino Ntx"] = TolinoNtxController()
Expand Down
11 changes: 11 additions & 0 deletions app/src/main/java/org/koreader/launcher/device/DeviceInfo.kt
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ object DeviceInfo {
ONYX_NOTE5,
ONYX_NOTE_AIR,
ONYX_NOTE_AIR2,
ONYX_NOTE_AIR3C,
ONYX_NOTE_PRO,
ONYX_NOTE_X2,
ONYX_NOVA,
Expand Down Expand Up @@ -117,6 +118,7 @@ object DeviceInfo {
ONYX_NOTE4,
ONYX_NOTE_AIR,
ONYX_NOTE_AIR2,
ONYX_NOTE_AIR3C,
ONYX_NOTE_PRO,
ONYX_NOTE_X2,
ONYX_NOVA,
Expand Down Expand Up @@ -208,6 +210,7 @@ object DeviceInfo {
private val ONYX_NOTE5: Boolean
private val ONYX_NOTE_AIR: Boolean
private val ONYX_NOTE_AIR2: Boolean
private val ONYX_NOTE_AIR3C: Boolean
private val ONYX_NOTE_PRO: Boolean
private val ONYX_NOTE_X2: Boolean
private val ONYX_NOVA: Boolean
Expand Down Expand Up @@ -435,6 +438,11 @@ object DeviceInfo {
ONYX_NOTE_AIR2 = BRAND.contentEquals("onyx")
&& (MODEL.contentEquals("noteair2") || MODEL.contentEquals("noteair2p"))

// Onyx Note Air 3C
ONYX_NOTE_AIR3C = BRAND.contentEquals("onyx")
&& PRODUCT.contentEquals("noteair3c")
&& DEVICE.contentEquals("noteair3c")

// Onyx Note Pro
ONYX_NOTE_PRO = MANUFACTURER.contentEquals("onyx")
&& PRODUCT.contentEquals("notepro")
Expand Down Expand Up @@ -638,6 +646,7 @@ object DeviceInfo {
deviceMap[EinkDevice.ONYX_NOTE5] = ONYX_NOTE5
deviceMap[EinkDevice.ONYX_NOTE_AIR] = ONYX_NOTE_AIR
deviceMap[EinkDevice.ONYX_NOTE_AIR2] = ONYX_NOTE_AIR2
deviceMap[EinkDevice.ONYX_NOTE_AIR3C] = ONYX_NOTE_AIR3C
deviceMap[EinkDevice.ONYX_NOTE_PRO] = ONYX_NOTE_PRO
deviceMap[EinkDevice.ONYX_NOTE_X2] = ONYX_NOTE_X2
deviceMap[EinkDevice.ONYX_NOVA] = ONYX_NOVA
Expand Down Expand Up @@ -693,6 +702,7 @@ object DeviceInfo {
lightsMap[LightsDevice.ONYX_NOTE4] = ONYX_NOTE4
lightsMap[LightsDevice.ONYX_NOTE_AIR] = ONYX_NOTE_AIR
lightsMap[LightsDevice.ONYX_NOTE_AIR2] = ONYX_NOTE_AIR2
lightsMap[LightsDevice.ONYX_NOTE_AIR3C] = ONYX_NOTE_AIR3C
lightsMap[LightsDevice.ONYX_NOTE_X2] = ONYX_NOTE_X2
lightsMap[LightsDevice.ONYX_NOVA] = ONYX_NOVA
lightsMap[LightsDevice.ONYX_NOVA2] = ONYX_NOVA2
Expand Down Expand Up @@ -758,6 +768,7 @@ object DeviceInfo {

HAS_COLOR_SCREEN = when (EINK) {
EinkDevice.NONE,
EinkDevice.ONYX_NOTE_AIR3C,
EinkDevice.ONYX_NOVA3_COLOR,
EinkDevice.ONYX_TAB_ULTRA_C,
EinkDevice.ONYX_NOVA_AIR_C -> true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ object EPDFactory {
DeviceInfo.EinkDevice.ONYX_NOTE5,
DeviceInfo.EinkDevice.ONYX_NOTE_AIR,
DeviceInfo.EinkDevice.ONYX_NOTE_AIR2,
DeviceInfo.EinkDevice.ONYX_NOTE_AIR3C,
DeviceInfo.EinkDevice.ONYX_NOTE_PRO,
DeviceInfo.EinkDevice.ONYX_NOTE_X2,
DeviceInfo.EinkDevice.ONYX_NOVA,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,10 @@ object LightsFactory {
logController("Onyx/Sdk")
OnyxSdkLightsController()
}
DeviceInfo.LightsDevice.ONYX_NOTE_AIR3C -> {
logController("Onyx/Sdk2")
OnyxSdk2LightsController()
}
DeviceInfo.LightsDevice.ONYX_NOVA3_COLOR,
DeviceInfo.LightsDevice.TAGUS_GEA -> {
logController("Onyx color")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package org.koreader.launcher.device.lights

import android.app.Activity
import android.util.Log
import org.koreader.launcher.device.LightsInterface

class OnyxSdk2LightsController : LightsInterface {
companion object {
private const val TAG = "Lights"
private const val MIN_LIGHT_VALUE = 0
}

override fun getPlatform(): String {
return "onyx-sdk-2-lights"
}

override fun hasFallback(): Boolean {
return false
}

override fun hasWarmth(): Boolean {
return true
}

override fun needsPermission(): Boolean {
return false
}

override fun getBrightness(activity: Activity): Int {
return OnyxSdkDeviceController.getLightValue(OnyxSdkDeviceController.Light.COLD)
}

override fun getWarmth(activity: Activity): Int {
return OnyxSdkDeviceController.getLightValue(OnyxSdkDeviceController.Light.WARM)
}

override fun setBrightness(activity: Activity, brightness: Int) {
if (brightness < getMinBrightness() || brightness > getMaxBrightness()) {
Log.w(TAG, "brightness value of of range: $brightness")
return
}
Log.v(TAG, "Setting brightness to $brightness")
OnyxSdkDeviceController.setLightValue(OnyxSdkDeviceController.Light.COLD, brightness)
}

override fun setWarmth(activity: Activity, warmth: Int) {
if (warmth < getMinWarmth() || warmth > getMaxWarmth()) {
Log.w(TAG, "warmth value of of range: $warmth")
return
}
Log.v(TAG, "Setting warmth to $warmth")
OnyxSdkDeviceController.setLightValue(OnyxSdkDeviceController.Light.WARM, warmth)
}

override fun getMinWarmth(): Int {
return MIN_LIGHT_VALUE
}

override fun getMaxWarmth(): Int {
return OnyxSdkDeviceController.getMaxLightValue(OnyxSdkDeviceController.Light.WARM)
}

override fun getMinBrightness(): Int {
return MIN_LIGHT_VALUE
}

override fun getMaxBrightness(): Int {
return OnyxSdkDeviceController.getMaxLightValue(OnyxSdkDeviceController.Light.COLD)
}

override fun enableFrontlightSwitch(activity: Activity): Int {
return 1
}

override fun hasStandaloneWarmth(): Boolean {
return false
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package org.koreader.launcher.device.lights

import android.util.Log
import java.lang.Class.forName
import java.lang.reflect.Method

object OnyxSdkDeviceController {
enum class Light(val code: Int) {
COLD(7),
WARM(6)
}

private const val TAG = "lights"

private val flController: Class<*>? = try {
forName("android.onyx.hardware.DeviceController")
} catch (e: Exception) {
Log.w(TAG, "$e")
null
}

private val getMaxLightValueMethod: Method? = try {
flController!!.getMethod("getMaxLightValue", Integer.TYPE)
} catch (e: Exception) {
Log.w(TAG, "$e")
null
}

private val getLightValueMethod: Method? = try {
flController!!.getMethod("getLightValue", Integer.TYPE)
} catch (e: Exception) {
Log.w(TAG, "$e")
null
}

private val setLightValueMethod: Method? = try {
flController!!.getMethod("setLightValue", Integer.TYPE, Integer.TYPE)
} catch (e: Exception) {
Log.w(TAG, "$e")
null
}

fun getMaxLightValue(light: Light): Int {
return try {
getMaxLightValueMethod!!.invoke(flController!!, light.code) as Int
} catch (e: Exception) {
Log.e(TAG, "error getting the max light $light", e)
0
}
}

fun getLightValue(light: Light): Int {
return try {
getLightValueMethod!!.invoke(flController!!, light.code) as Int
} catch (e: Exception) {
Log.e(TAG, "error getting the light $light", e)
0
}
}

fun setLightValue(light: Light, value: Int) {
try {
setLightValueMethod!!.invoke(flController!!, light.code, value)
} catch (e: Exception) {
Log.e(TAG, "error setting the light $light to $value", e)
}
}
}