diff --git a/TODO.txt b/TODO.txt
index 6ac1555..7239efe 100644
--- a/TODO.txt
+++ b/TODO.txt
@@ -21,3 +21,9 @@ And MULF should be COMBOX for E series if I understand right
FullBrightness: --Mcu toString-----[ cmdType:6C - data:01-64 ]
LowestBrightness: --Mcu toString-----[ cmdType:6C - data:01-00 ]
+
+MediaButtons Yes: cmdType: 0x70, data: 0x0e-0x00
+MediaButtons No: cmdType: 0x70, data: 0x0e-0x01
+echo -en \\xf2\\x0\\x70\\x2\\xe\\x0\\x7F > /dev/ttyMSM1
+echo -en \\xf2\\x0\\x70\\x2\\xe\\x1\\x7E > /dev/ttyMSM1
+
diff --git a/app/build.gradle b/app/build.gradle
index c14e4b8..e26582e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,11 +8,11 @@ android {
buildToolsVersion "30.0.3"
defaultConfig {
- applicationId "com.snaggly.ksw_toolkit"
+ applicationId "com.snaggly.wits.ksw_toolkit.service"
minSdkVersion 28
- targetSdkVersion 29
+ targetSdkVersion 30
versionCode 1
- versionName "0.7.0"
+ versionName "0.8S"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
@@ -35,18 +35,18 @@ android {
dependencies {
implementation 'com.google.code.gson:gson:2.8.6'
- implementation "org.jetbrains.kotlin:kotlin-stdlib:1.4.21"
- implementation 'androidx.appcompat:appcompat:1.2.0'
- implementation 'com.google.android.material:material:1.3.0'
- implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
+ implementation "org.jetbrains.kotlin:kotlin-stdlib:1.5.10"
+ implementation 'androidx.appcompat:appcompat:1.3.1'
+ implementation 'com.google.android.material:material:1.4.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
implementation 'androidx.preference:preference-ktx:1.1.1'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
- implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.0'
- implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.0'
- implementation "androidx.recyclerview:recyclerview:1.1.0"
+ implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
+ implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
+ implementation "androidx.recyclerview:recyclerview:1.2.1"
implementation "androidx.recyclerview:recyclerview-selection:1.1.0"
implementation project(path: ':McuCommunicator:library')
- testImplementation 'junit:junit:4.13.1'
- androidTestImplementation 'androidx.test.ext:junit:1.1.2'
- androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
\ No newline at end of file
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index f00253f..4a9f7d2 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -25,8 +25,8 @@
-keep class com.snaggly.ksw_toolkit.core.config.beans.** {*;}
-keep class com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes {*;}
-keep class com.snaggly.ksw_toolkit.util.list.eventtype.EventMode {*;}
--keep class com.snaggly.ksw_toolkit.util.list.keyevent.KeyCode {*;}
--keep class com.snaggly.ksw_toolkit.util.list.mcu.McuCommandsList {*;}
+-keep class com.snaggly.ksw_toolkit.IKSWToolKitService {*;}
+-keep class com.snaggly.ksw_toolkit.IMcuListener {*;}
-keep class com.wits.pms.* {*;}
-keep class com.wits.pms.statuscontrol.* {*;}
-keep class projekt.auto.mcu.** {*;}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a825080..de06d43 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,47 +1,53 @@
+ package="com.snaggly.ksw_toolkit"
+ android:sharedUserId="android.uid.system">
-
-
-
-
-
+
+
-
-
+
-
+ android:roundIcon="@mipmap/ic_launcher_round">
+
+
+
+ android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
+
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/aidl/com/snaggly/ksw_toolkit/IKSWToolKitService.aidl b/app/src/main/aidl/com/snaggly/ksw_toolkit/IKSWToolKitService.aidl
new file mode 100644
index 0000000..360ce21
--- /dev/null
+++ b/app/src/main/aidl/com/snaggly/ksw_toolkit/IKSWToolKitService.aidl
@@ -0,0 +1,18 @@
+// IKSWToolKitService.aidl
+package com.snaggly.ksw_toolkit;
+
+import com.snaggly.ksw_toolkit.IMcuListener;
+
+interface IKSWToolKitService {
+ boolean sendMcuCommand(int cmdType, in byte[] data);
+ boolean changeBtnConfig(int btnType, int cmdType, String cmdValue);
+ void setDefaultBtnLayout();
+ String getConfig();
+ boolean setOptions(in boolean[] allSettings);
+ String[] getSettingsTypes();
+ boolean setMcuPath(String path);
+ boolean registerMcuListener(IMcuListener listener);
+ boolean unregisterMcuListener(IMcuListener listener);
+ int getNightBrightnessSetting();
+ void setNightBrightnessSetting(int value);
+}
\ No newline at end of file
diff --git a/app/src/main/aidl/com/snaggly/ksw_toolkit/IMcuListener.aidl b/app/src/main/aidl/com/snaggly/ksw_toolkit/IMcuListener.aidl
new file mode 100644
index 0000000..b604a3b
--- /dev/null
+++ b/app/src/main/aidl/com/snaggly/ksw_toolkit/IMcuListener.aidl
@@ -0,0 +1,6 @@
+// IMcuListener.aidl
+package com.snaggly.ksw_toolkit;
+
+interface IMcuListener {
+ void updateMcu(String eventName, int cmdType, in byte[] data);
+}
\ No newline at end of file
diff --git a/app/src/main/aidl/com/wits/pms/IPowerManagerAppService.aidl b/app/src/main/aidl/com/wits/pms/IPowerManagerAppService.aidl
index b140daf..d82c031 100644
--- a/app/src/main/aidl/com/wits/pms/IPowerManagerAppService.aidl
+++ b/app/src/main/aidl/com/wits/pms/IPowerManagerAppService.aidl
@@ -1,22 +1,22 @@
package com.wits.pms;
interface IPowerManagerAppService {
-/*1*/ boolean sendCommand(String str);
-/*2*/ boolean sendStatus(String str);
-/*3*/ void registerCmdListener(com.wits.pms.ICmdListener iCmdListener);
-/*4*/ void unregisterCmdListener(com.wits.pms.ICmdListener iCmdListener);
-/*5*/ void registerObserver(String str, com.wits.pms.IContentObserver iContentObserver);
-/*6*/ void unregisterObserver(com.wits.pms.IContentObserver iContentObserver);
-/*7*/ boolean getStatusBoolean(String str);
-/*8*/ int getStatusInt(String str);
-/*9*/ String getStatusString(String str);
-/*10*/ int getSettingsInt(String str);
-/*11*/ String getSettingsString(String str);
-/*12*/ void setSettingsInt(String str, int i);
-/*13*/ void setSettingsString(String str, String str2);
-/*14*/ void addIntStatus(String str, int i);
-/*15*/ void addBooleanStatus(String str, boolean z);
-/*16*/ void addStringStatus(String str, String str2);
-/*17*/ void saveJsonConfig(String str, String str2);
-/*18*/ String getJsonConfig(String str);
-}
\ No newline at end of file
+ boolean sendCommand(String str);
+ boolean sendStatus(String str);
+ void registerCmdListener(com.wits.pms.ICmdListener iCmdListener);
+ void unregisterCmdListener(com.wits.pms.ICmdListener iCmdListener);
+ void registerObserver(String str, com.wits.pms.IContentObserver iContentObserver);
+ void unregisterObserver(com.wits.pms.IContentObserver iContentObserver);
+ boolean getStatusBoolean(String str);
+ int getStatusInt(String str);
+ String getStatusString(String str);
+ int getSettingsInt(String str);
+ String getSettingsString(String str);
+ void setSettingsInt(String str, int i);
+ void setSettingsString(String str, String str2);
+ void addIntStatus(String str, int i);
+ void addBooleanStatus(String str, boolean z);
+ void addStringStatus(String str, String str2);
+ void saveJsonConfig(String str, String str2);
+ String getJsonConfig(String str);
+}
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/boot/BootReceiver.kt b/app/src/main/java/com/snaggly/ksw_toolkit/boot/BootReceiver.kt
index c8accde..c2f19f6 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/boot/BootReceiver.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/boot/BootReceiver.kt
@@ -6,30 +6,28 @@ import android.content.Intent
import android.media.AudioManager
import android.widget.Toast
import com.snaggly.ksw_toolkit.core.config.ConfigManager
-import com.snaggly.ksw_toolkit.core.service.CoreService
+import com.snaggly.ksw_toolkit.core.service.adb.AdbServiceConnection
import com.wits.pms.statuscontrol.PowerManagerApp
-
class BootReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
if (Intent.ACTION_BOOT_COMPLETED == intent!!.action) {
- try {
- val armMediaVol = PowerManagerApp.getManager().getSettingsInt("Android_media_vol")
- val armPhoneVol = PowerManagerApp.getManager().getSettingsInt("Android_phone_vol")
- val carPhoneVol = PowerManagerApp.getManager().getSettingsInt("Car_phone_vol")
- val carNaviVol = PowerManagerApp.getManager().getSettingsInt("Car_navi_vol")
-
- PowerManagerApp.getManager().setSettingsInt("Android_media_vol", armPhoneVol)
- PowerManagerApp.getManager().setSettingsInt("Android_phone_vol", armMediaVol)
- PowerManagerApp.getManager().setSettingsInt("Car_phone_vol", carPhoneVol)
- PowerManagerApp.getManager().setSettingsInt("Car_navi_vol", carNaviVol)
- } catch (ex : Exception) {
- Toast.makeText(context, "Unable to connect to Wits!", Toast.LENGTH_LONG).show()
- }
-
val config = ConfigManager.getConfig(context?.filesDir!!.absolutePath)
- if (config.systemTweaks.maxVolume.data) {
+ if (config.systemOptions.maxVolume!!) {
+ try {
+ val armMediaVol = PowerManagerApp.getManager().getSettingsInt("Android_media_vol")
+ val armPhoneVol = PowerManagerApp.getManager().getSettingsInt("Android_phone_vol")
+ val carPhoneVol = PowerManagerApp.getManager().getSettingsInt("Car_phone_vol")
+ val carNaviVol = PowerManagerApp.getManager().getSettingsInt("Car_navi_vol")
+
+ PowerManagerApp.getManager().setSettingsInt("Android_media_vol", armPhoneVol)
+ PowerManagerApp.getManager().setSettingsInt("Android_phone_vol", armMediaVol)
+ PowerManagerApp.getManager().setSettingsInt("Car_phone_vol", carPhoneVol)
+ PowerManagerApp.getManager().setSettingsInt("Car_navi_vol", carNaviVol)
+ } catch (ex: Exception) {
+ Toast.makeText(context, "Unable to connect to Wits!", Toast.LENGTH_LONG).show()
+ }
val audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0)
audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, audioManager.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION), 0)
@@ -41,8 +39,8 @@ class BootReceiver : BroadcastReceiver() {
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL), 0)
}
- if (config.systemTweaks.startAtBoot.data) {
- context.startForegroundService(Intent(context, CoreService::class.java))
+ if (config.systemOptions.startAtBoot!!) {
+ AdbServiceConnection.startThisService(context)
}
}
}
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/config/ConfigData.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/config/ConfigData.kt
index 5e916b1..ed08bcc 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/config/ConfigData.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/config/ConfigData.kt
@@ -1,10 +1,10 @@
package com.snaggly.ksw_toolkit.core.config
import com.snaggly.ksw_toolkit.core.config.beans.EventManager
-import com.snaggly.ksw_toolkit.core.config.beans.SystemTweaks
+import com.snaggly.ksw_toolkit.core.config.beans.SystemOptions
import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
data class ConfigData(
- var systemTweaks: SystemTweaks,
- var eventManagers : HashMap
+ var systemOptions: SystemOptions,
+ var eventManagers : HashMap
)
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/config/ConfigManager.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/config/ConfigManager.kt
index 9f1e04f..a4d818f 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/config/ConfigManager.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/config/ConfigManager.kt
@@ -2,52 +2,47 @@ package com.snaggly.ksw_toolkit.core.config
import com.google.gson.Gson
import com.snaggly.ksw_toolkit.core.config.beans.*
-import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
import java.io.*
-class ConfigManager private constructor() : IConfigBean {
+class ConfigManager private constructor() {
private var configFile: File? = null
- lateinit var systemTweaks: SystemTweaks private set
- var eventManagers = HashMap()
- val gson = Gson()
+ var systemOptions = SystemOptions.initSystemTweaks()
+ var eventManagers = EventManager.initialButtons()
+ var json : String? = null
+ private val gson = Gson()
- fun initBeans() {
- systemTweaks = SystemTweaks.initSystemTweaks()
- for (type in EventManagerTypes.values()) {
- eventManagers[type] = EventManager.initEventManager()
- }
- }
-
- override fun saveConfig() {
- val json = gson.toJson(ConfigData(systemTweaks, eventManagers))
+ fun saveConfig() {
+ json = gson.toJson(ConfigData(systemOptions, eventManagers))
val fileWriter = FileWriter(configFile!!)
fileWriter.write(json)
fileWriter.close()
}
- override fun readConfig() {
+ fun readConfig() {
val fileReader = FileReader(configFile!!)
- val json = fileReader.readText()
+ json = fileReader.readText()
fileReader.close()
val configData = gson.fromJson(json, ConfigData::class.java)
- configData.systemTweaks.startAtBoot?.let { systemTweaks.startAtBoot = it }
- configData.systemTweaks.kswService?.let { systemTweaks.kswService = it }
- configData.systemTweaks.carDataLogging?.let { systemTweaks.carDataLogging = it }
- configData.systemTweaks.autoVolume?.let { systemTweaks.autoVolume = it }
- configData.systemTweaks.maxVolume?.let { systemTweaks.maxVolume = it }
- configData.systemTweaks.hideTopBar?.let { systemTweaks.hideTopBar = it }
- configData.systemTweaks.shrinkTopBar?.let { systemTweaks.shrinkTopBar = it }
- configData.systemTweaks.dpi?.let { systemTweaks.dpi = it }
- configData.systemTweaks.logMcuEvent?.let { systemTweaks.logMcuEvent = it }
- configData.systemTweaks.interceptMcuCommand?.let { systemTweaks.interceptMcuCommand = it }
+ configData.systemOptions.startAtBoot?.let { systemOptions.startAtBoot = it }
+ configData.systemOptions.hijackCS?.let { systemOptions.hijackCS = it }
+ configData.systemOptions.soundRestorer?.let { systemOptions.soundRestorer = it }
+ configData.systemOptions.autoTheme?.let { systemOptions.autoTheme = it }
+ configData.systemOptions.autoVolume?.let { systemOptions.autoVolume = it }
+ configData.systemOptions.maxVolume?.let { systemOptions.maxVolume = it }
+ configData.systemOptions.logMcuEvent?.let { systemOptions.logMcuEvent = it }
+ configData.systemOptions.interceptMcuCommand?.let { systemOptions.interceptMcuCommand = it }
+ configData.systemOptions.extraMediaButtonHandle?.let { systemOptions.extraMediaButtonHandle = it }
+ configData.systemOptions.nightBrightness?.let { systemOptions.nightBrightness = it }
+ configData.systemOptions.nightBrightnessLevel?.let { systemOptions.nightBrightnessLevel = it }
+ configData.systemOptions.mcuPath?.let { systemOptions.mcuPath = it }
for (type in configData.eventManagers) {
- configData.eventManagers[type.key]!!.eventMode?.let { eventManagers[type.key]?.eventMode = it }
- configData.eventManagers[type.key]!!.mcuCommandMode?.let { eventManagers[type.key]?.mcuCommandMode = it }
- configData.eventManagers[type.key]!!.appName?.let { eventManagers[type.key]?.appName = it }
- configData.eventManagers[type.key]!!.keyCode?.let { eventManagers[type.key]?.keyCode = it }
+ configData.eventManagers[type.key]?.eventMode!!.let { eventManagers[type.key]?.eventMode = it }
+ configData.eventManagers[type.key]?.mcuCommandMode!!.let { eventManagers[type.key]?.mcuCommandMode = it }
+ configData.eventManagers[type.key]?.appName!!.let { eventManagers[type.key]?.appName = it }
+ configData.eventManagers[type.key]?.keyCode!!.let { eventManagers[type.key]?.keyCode = it }
}
}
@@ -60,31 +55,12 @@ class ConfigManager private constructor() : IConfigBean {
return config
}
config.configFile = File("$filePath/$fileName")
- if (!config.configFile!!.isFile)
+ if (!config.configFile!!.isFile) {
config.configFile!!.createNewFile()
- config.initBeans()
- try {
- config.readConfig()
+ config.saveConfig()
}
- catch (ioe: Exception) {
- config.initBeans()
- }
- IConfigBean.configManager = config
+ config.readConfig()
return config
}
-
- @Throws(UnsupportedEncodingException::class)
- fun importConfig(applicationFilePath: String, toImportFilePath: String) : ConfigManager {
- val inputFile = File(toImportFilePath)
- inputFile.copyTo(File("$applicationFilePath/$fileName"), true)
- config.configFile = null
- getConfig(applicationFilePath)
- return config
- }
-
- fun exportConfig(filePath: String) {
- val outputFile = File(filePath)
- config.configFile!!.copyTo(outputFile, true)
- }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/config/IConfigBean.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/config/IConfigBean.kt
deleted file mode 100644
index 4ecd5e4..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/config/IConfigBean.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.snaggly.ksw_toolkit.core.config
-
-interface IConfigBean {
- fun saveConfig()
- fun readConfig()
-
- companion object {
- var configManager : IConfigBean? = null
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/config/beans/EventManager.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/config/beans/EventManager.kt
index 3e9569e..57cae76 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/config/beans/EventManager.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/config/beans/EventManager.kt
@@ -1,19 +1,184 @@
package com.snaggly.ksw_toolkit.core.config.beans
-import com.snaggly.ksw_toolkit.core.config.custom.IntegerSetting
-import com.snaggly.ksw_toolkit.core.config.custom.StringSetting
+import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
import com.snaggly.ksw_toolkit.util.list.eventtype.EventMode
+import com.snaggly.ksw_toolkit.util.list.keyevent.KeyCode
+import com.snaggly.ksw_toolkit.util.list.mcu.McuCommandsEnum
-class EventManager(eventMode: EventMode, keyCode: Int, appName: String, mcuCommandMode: Int){
-
- var eventMode = eventMode
- var keyCode = IntegerSetting(keyCode)
- var appName = StringSetting(appName)
- var mcuCommandMode = IntegerSetting(mcuCommandMode)
+class EventManager(var eventMode: EventMode?, var keyCode: Int?, var appName: String?,
+ var mcuCommandMode: Int?
+){
companion object {
- fun initEventManager() : EventManager{
- return EventManager(EventMode.NoAssignment, -1, "", -1)
+
+ fun initialButtons(): HashMap {
+ val result = hashMapOf()
+ for (type in EventManagerTypes.values()) {
+ result[type] = EventManager(EventMode.NoAssignment, -1, "", -1)
+ }
+
+ return result
+ }
+
+ fun initStandardButtons(): HashMap {
+ return hashMapOf(
+ EventManagerTypes.KnobPress to EventManager(
+ EventMode.KeyEvent,
+ KeyCode.ENTER.keycode,
+ "",
+ -1
+ ),
+ EventManagerTypes.KnobTiltDown to EventManager(
+ EventMode.KeyEvent,
+ KeyCode.DPAD_DOWN.keycode,
+ "",
+ -1
+ ),
+ EventManagerTypes.KnobTiltUp to EventManager(
+ EventMode.KeyEvent,
+ KeyCode.DPAD_UP.keycode,
+ "",
+ -1
+ ),
+ EventManagerTypes.KnobTiltLeft to EventManager(
+ EventMode.KeyEvent,
+ KeyCode.DPAD_LEFT.keycode,
+ "",
+ -1
+ ),
+ EventManagerTypes.KnobTiltRight to EventManager(
+ EventMode.KeyEvent,
+ KeyCode.DPAD_RIGHT.keycode,
+ "",
+ -1
+ ),
+ EventManagerTypes.KnobTurnLeft to EventManager(
+ EventMode.KeyEvent,
+ KeyCode.DPAD_UP.keycode,
+ "",
+ -1
+ ),
+ EventManagerTypes.KnobTurnRight to EventManager(
+ EventMode.KeyEvent,
+ KeyCode.DPAD_DOWN.keycode,
+ "",
+ -1
+ ),
+ EventManagerTypes.BackButton to EventManager(
+ EventMode.KeyEvent,
+ KeyCode.BACK.keycode,
+ "",
+ -1
+ ),
+ EventManagerTypes.MenuButton to EventManager(
+ EventMode.KeyEvent,
+ KeyCode.HOME.keycode,
+ "",
+ -1
+ ),
+ EventManagerTypes.OptionsButton to EventManager(
+ EventMode.McuCommand,
+ -1,
+ "",
+ McuCommandsEnum.CarInfo.ordinal
+ ),
+ EventManagerTypes.NavigationButton to EventManager(
+ EventMode.StartApp,
+ -1,
+ "com.google.android.apps.maps",
+ -1
+ ),
+ EventManagerTypes.ModeButton to EventManager(
+ EventMode.StartApp,
+ -1,
+ "com.spotify.music",
+ -1
+ ),
+ EventManagerTypes.MediaNext to EventManager(
+ EventMode.KeyEvent,
+ KeyCode.MEDIA_NEXT.keycode,
+ "",
+ -1
+ ),
+ EventManagerTypes.MediaPrevious to EventManager(
+ EventMode.KeyEvent,
+ KeyCode.MEDIA_PREVIOUS.keycode,
+ "",
+ -1
+ ),
+ EventManagerTypes.MediaPlayPause to EventManager(
+ EventMode.KeyEvent,
+ KeyCode.MEDIA_PLAY_PAUSE.keycode,
+ "",
+ -1
+ ),
+ EventManagerTypes.VoiceCommandButton to EventManager(
+ EventMode.KeyEvent,
+ KeyCode.VOICE_ASSIST.keycode,
+ "",
+ -1
+ ),
+ EventManagerTypes.TelephoneButton to EventManager(
+ EventMode.StartApp,
+ -1,
+ "com.zjinnova.zlink",
+ -1
+ ),
+ EventManagerTypes.VolumeDecrease to EventManager(
+ EventMode.KeyEvent,
+ KeyCode.VOLUME_DOWN.keycode,
+ "",
+ -1
+ ),
+ EventManagerTypes.VolumeIncrease to EventManager(
+ EventMode.KeyEvent,
+ KeyCode.VOLUME_UP.keycode,
+ "",
+ -1
+ ),
+ EventManagerTypes.TelephoneButtonLongPress to EventManager(
+ EventMode.NoAssignment,
+ -1,
+ "",
+ -1
+ ),
+ EventManagerTypes.TelephoneButtonHangUp to EventManager(
+ EventMode.NoAssignment,
+ -1,
+ "",
+ -1
+ ),
+ EventManagerTypes.Idle to EventManager(
+ EventMode.NoAssignment,
+ -1,
+ "",
+ -1
+ ),
+ EventManagerTypes.ScreenSwitch to EventManager(
+ EventMode.NoAssignment,
+ -1,
+ "",
+ -1
+ ),
+ EventManagerTypes.Dummy to EventManager(
+ EventMode.NoAssignment,
+ -1,
+ "",
+ -1
+ ),
+ EventManagerTypes.CarData to EventManager(
+ EventMode.NoAssignment,
+ -1,
+ "",
+ -1
+ ),
+ EventManagerTypes.BenzData to EventManager(
+ EventMode.NoAssignment,
+ -1,
+ "",
+ -1
+ )
+ )
}
}
}
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/config/beans/SystemOptions.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/config/beans/SystemOptions.kt
new file mode 100644
index 0000000..32da430
--- /dev/null
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/config/beans/SystemOptions.kt
@@ -0,0 +1,37 @@
+package com.snaggly.ksw_toolkit.core.config.beans
+
+import com.wits.pms.statuscontrol.PowerManagerApp
+
+class SystemOptions(
+ var startAtBoot: Boolean?,
+ var hijackCS: Boolean?,
+ var soundRestorer: Boolean?,
+ var autoTheme: Boolean?,
+ var autoVolume: Boolean?,
+ var maxVolume: Boolean?,
+ var logMcuEvent: Boolean?,
+ var interceptMcuCommand: Boolean?,
+ var extraMediaButtonHandle: Boolean?,
+ var nightBrightness: Boolean?,
+ var nightBrightnessLevel: Int?,
+ var mcuPath: String?
+) {
+ companion object {
+ fun initSystemTweaks() : SystemOptions {
+ return SystemOptions(
+ startAtBoot = false,
+ hijackCS = false,
+ soundRestorer = false,
+ autoTheme = false,
+ autoVolume = false,
+ maxVolume = true,
+ logMcuEvent = true,
+ interceptMcuCommand = true,
+ extraMediaButtonHandle = PowerManagerApp.getSettingsInt("CarDisplay") == 0,
+ nightBrightness = false,
+ nightBrightnessLevel = 65,
+ mcuPath = ""
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/config/beans/SystemTweaks.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/config/beans/SystemTweaks.kt
deleted file mode 100644
index ec92cbc..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/config/beans/SystemTweaks.kt
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.snaggly.ksw_toolkit.core.config.beans
-
-import com.snaggly.ksw_toolkit.core.config.custom.BooleanSetting
-import com.snaggly.ksw_toolkit.core.config.custom.IntegerSetting
-
-class SystemTweaks(startAtBoot: Boolean,
- kswService: Boolean,
- carDataLogging: Boolean,
- autoVolume: Boolean,
- maxVolume: Boolean,
- hideTopBar: Boolean,
- shrinkTopBar: Boolean,
- dpi: Int,
- logMcuEvent: Boolean,
- interceptMcuCommand: Boolean) {
- var startAtBoot = BooleanSetting(startAtBoot)
- var kswService = BooleanSetting(kswService)
- var carDataLogging = BooleanSetting(carDataLogging)
- var autoVolume = BooleanSetting(autoVolume)
- var maxVolume = BooleanSetting(maxVolume)
- var hideTopBar = BooleanSetting(hideTopBar)
- var shrinkTopBar = BooleanSetting(shrinkTopBar)
- var dpi = IntegerSetting(dpi)
- var logMcuEvent = BooleanSetting(logMcuEvent)
- var interceptMcuCommand = BooleanSetting(interceptMcuCommand)
-
- companion object {
- fun initSystemTweaks() : SystemTweaks {
- return SystemTweaks(
- startAtBoot = true,
- kswService = true,
- carDataLogging = false,
- autoVolume = false,
- maxVolume = false,
- hideTopBar = false,
- shrinkTopBar = false,
- dpi = 160,
- logMcuEvent = false,
- interceptMcuCommand = false
- )
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/config/custom/BooleanSetting.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/config/custom/BooleanSetting.kt
deleted file mode 100644
index bf18333..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/config/custom/BooleanSetting.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.snaggly.ksw_toolkit.core.config.custom
-
-import com.snaggly.ksw_toolkit.core.config.IConfigBean
-
-class BooleanSetting(value: Boolean) {
- var data = value
- set(value) {
- field = value
- IConfigBean.configManager?.saveConfig()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/config/custom/IntegerSetting.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/config/custom/IntegerSetting.kt
deleted file mode 100644
index 5f64190..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/config/custom/IntegerSetting.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.snaggly.ksw_toolkit.core.config.custom
-
-import com.snaggly.ksw_toolkit.core.config.IConfigBean
-
-class IntegerSetting(value: Int) {
- var data = value
- set(value) {
- field = value
- IConfigBean.configManager?.saveConfig()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/config/custom/StringSetting.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/config/custom/StringSetting.kt
deleted file mode 100644
index 48e2f79..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/config/custom/StringSetting.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package com.snaggly.ksw_toolkit.core.config.custom
-
-import com.snaggly.ksw_toolkit.core.config.IConfigBean
-
-class StringSetting(string: String) {
- var data = string
- set(value) {
- field = value
- IConfigBean.configManager?.saveConfig()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/CoreService.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/CoreService.kt
index 9d75583..e75f826 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/CoreService.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/CoreService.kt
@@ -1,102 +1,86 @@
package com.snaggly.ksw_toolkit.core.service
-import android.app.*
-import android.content.Context
+import android.app.AlertDialog
+import android.app.Service
import android.content.Intent
-import android.content.pm.PackageManager
-import android.graphics.Color
-import android.os.Binder
-import android.os.Build
import android.os.IBinder
import android.view.WindowManager
-import androidx.annotation.RequiresApi
-import androidx.core.app.NotificationCompat
-import com.snaggly.ksw_toolkit.BuildConfig
+import android.widget.Toast
import com.snaggly.ksw_toolkit.R
import com.snaggly.ksw_toolkit.core.service.adb.AdbServiceConnection
import com.snaggly.ksw_toolkit.core.service.mcu.McuLogic
import com.snaggly.ksw_toolkit.core.service.mcu.McuReaderHandler
-import java.util.*
+import com.snaggly.ksw_toolkit.core.service.remote.KSWToolKitService
+import com.snaggly.ksw_toolkit.core.service.remote.ServiceValidation
class CoreService : Service() {
- @RequiresApi(api = Build.VERSION_CODES.O)
- private fun startMyOwnForeground() {
- val notificationChannelId = BuildConfig.APPLICATION_ID
- val channelName = "McuListenerService"
- val chan = NotificationChannel(notificationChannelId, channelName, NotificationManager.IMPORTANCE_NONE)
- chan.lightColor = Color.BLACK
- chan.lockscreenVisibility = Notification.VISIBILITY_PRIVATE
- val manager = (getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager)
- manager.createNotificationChannel(chan)
- val notificationBuilder = NotificationCompat.Builder(this, notificationChannelId)
- val notification: Notification = notificationBuilder.setOngoing(true)
- .setSmallIcon(R.drawable.ic_stat_name)
- .setContentTitle("KSW-Toolkit running in background...")
- .setPriority(NotificationManager.IMPORTANCE_MIN)
- .setCategory(Notification.CATEGORY_SERVICE)
- .build()
- startForeground(2, notification)
+ override fun onBind(intent: Intent): IBinder? {
+ try {
+ ServiceValidation.signature = intent.getByteArrayExtra("Authentication")
+ }
+ catch (e : Exception) {}
+ ServiceValidation.hasAuthenticated = false
+ return kswToolKitService
}
- inner class McuServiceBinder : Binder() {
- fun getService(): CoreService = this@CoreService
+ override fun onRebind(intent: Intent?) {
+ if (intent != null) {
+ try {
+ ServiceValidation.signature = intent.getByteArrayExtra("Authentication")
+ }
+ catch (e : Exception) {}
+ }
+ else
+ ServiceValidation.signature = null
+ ServiceValidation.hasAuthenticated = false
+ super.onRebind(intent)
}
- private val binder = McuServiceBinder()
- override fun onBind(intent: Intent): IBinder {
- return binder
+ override fun onUnbind(intent: Intent?): Boolean {
+ ServiceValidation.signature = null
+ ServiceValidation.hasAuthenticated = false
+ return super.onUnbind(intent)
}
- val adbConnection = AdbServiceConnection
val mcuLogic = McuLogic
- var mcuReaderHandler : McuReaderHandler? = null
-
- override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
- startMyOwnForeground()
+ private var mcuReaderHandler : McuReaderHandler? = null
+ private var kswToolKitService : KSWToolKitService? = null
+ override fun onCreate() {
try {
mcuReaderHandler = McuReaderHandler(applicationContext)
+ if (mcuReaderHandler == null)
+ throw Exception("Unable to initiate McuReaderHandler")
+
mcuReaderHandler!!.startMcuReader()
+ kswToolKitService = KSWToolKitService(this, mcuReaderHandler!!)
} catch (e: Exception) {
- return crashOut("Could not start McuReader!\n\n${e.localizedMessage}")
+ crashOut("Could not start McuReader!\n\n${e.stackTrace}")
}
- return START_STICKY
- }
-
- override fun onCreate() {
- super.onCreate()
-
- try {
- adbConnection.connect(applicationContext)
- checkPermission()
- } catch (e: Exception) {
- crashOut("Could not connect to Adb!\n\n${e.localizedMessage}")
- }
+ "KSW-ToolKit-Service started".showMessage()
}
override fun onDestroy() {
- super.onDestroy()
- adbConnection.startKsw()
+ kswToolKitService = null
+ showAlertMessage("KSW-ToolKit-Service stopped")
+ AdbServiceConnection.startKsw(applicationContext)
mcuReaderHandler?.stopReader()
- adbConnection.disconnect()
+ super.onDestroy()
}
- private fun checkPermission() {
- if (applicationContext.checkSelfPermission("android.permission.READ_LOGS") != PackageManager.PERMISSION_GRANTED) {
- adbConnection.sendCommand("pm grant ${BuildConfig.APPLICATION_ID} android.permission.READ_LOGS")
- adbConnection.sendCommand("pm grant ${BuildConfig.APPLICATION_ID} android.permission.INJECT_EVENTS")
- val alert = AlertDialog.Builder(this, R.style.alertDialogNight).setTitle("KSW-ToolKit-McuService").setMessage("Granted system permissions.\nPlease restart the app for effects to take in place").create()
- alert.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alert.show()
- }
+ private fun String.showMessage() {
+ Toast.makeText(this@CoreService, this, Toast.LENGTH_SHORT).show()
}
- private fun crashOut(message: String) : Int {
+ private fun showAlertMessage(message: String) {
val alert = AlertDialog.Builder(this, R.style.alertDialogNight).setTitle("KSW-ToolKit-CoreService").setMessage(message).create()
alert.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
alert.show()
+ }
+
+ private fun crashOut(message: String) {
+ showAlertMessage(message)
stopSelf()
- return START_NOT_STICKY
}
}
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/adb/AdbServiceConnection.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/adb/AdbServiceConnection.kt
index ed50ca5..f34f00f 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/adb/AdbServiceConnection.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/adb/AdbServiceConnection.kt
@@ -1,49 +1,21 @@
package com.snaggly.ksw_toolkit.core.service.adb
import android.content.Context
+import com.snaggly.ksw_toolkit.BuildConfig
+import com.snaggly.ksw_toolkit.core.service.CoreService
import com.snaggly.ksw_toolkit.util.adb.AdbManager
object AdbServiceConnection {
- private val adbShellListeners = ArrayList()
-
- fun connect(context: Context) {
- AdbManager.connect(context, "shell:", object : AdbManager.OnAdbShellDataReceived {
- override fun onDataReceived(text: String) {
- for (listener in adbShellListeners)
- listener.update(text)
- }
- })
- }
-
- fun disconnect() {
- AdbManager.disconnect()
- }
-
- fun sendCommand(command: String) {
- AdbManager.sendCommand(command)
- }
-
- fun stopKsw() {
- sendCommand("am stopservice --user 0 com.wits.pms/com.wits.pms.mcu.McuService\nappops set com.wits.pms SYSTEM_ALERT_WINDOW deny")
- }
-
- fun startKsw() {
- sendCommand("am startservice --user 0 com.wits.pms/com.wits.pms.mcu.McuService\nappops set com.wits.pms SYSTEM_ALERT_WINDOW allow")
+ fun stopKsw(context: Context) {
+ AdbManager.sendCommand("am stopservice --user 0 com.wits.pms/com.wits.pms.mcu.McuService\nappops set com.wits.pms SYSTEM_ALERT_WINDOW deny", context)
}
- fun sendKeyEvent(code: Int) {
- sendCommand("input keyevent $code")
+ fun startKsw(context: Context) {
+ AdbManager.sendCommand("am startservice --user 0 com.wits.pms/com.wits.pms.mcu.McuService\nappops set com.wits.pms SYSTEM_ALERT_WINDOW allow", context)
}
- fun startApp(appId: String) {
- sendCommand("monkey -p $appId -c android.intent.category.LAUNCHER 1")
+ fun startThisService(context: Context) {
+ AdbManager.sendCommand("am startservice --user 0 ${BuildConfig.APPLICATION_ID}/${CoreService::class.java.name}", context)
}
- fun registerShellListener(listener: ShellObserver) {
- adbShellListeners.add(listener)
- }
-
- fun unregisterShellListener(listener: ShellObserver) {
- adbShellListeners.remove(listener)
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/adb/ShellObserver.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/adb/ShellObserver.kt
deleted file mode 100644
index 04bb791..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/adb/ShellObserver.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.snaggly.ksw_toolkit.core.service.adb
-
-interface ShellObserver {
- fun update(newLine: String)
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/helper/CoreServiceClient.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/helper/CoreServiceClient.kt
deleted file mode 100644
index 1222c00..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/helper/CoreServiceClient.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.snaggly.ksw_toolkit.core.service.helper
-
-import androidx.lifecycle.ViewModel
-import com.snaggly.ksw_toolkit.core.service.CoreService
-
-abstract class CoreServiceClient : ViewModel() {
- companion object {
- var coreService: CoreService? = null
- }
-
- val coreService: CoreService?
- get() = CoreServiceClient.coreService
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/helper/CoreServiceConnector.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/helper/CoreServiceConnector.kt
deleted file mode 100644
index 71026e6..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/helper/CoreServiceConnector.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.snaggly.ksw_toolkit.core.service.helper
-
-import android.content.ComponentName
-import android.content.Context
-import android.content.Intent
-import android.content.ServiceConnection
-import android.os.IBinder
-import com.snaggly.ksw_toolkit.core.service.CoreService
-
-class CoreServiceConnector(private val context: Context) {
-
- private val serviceConnector = object: ServiceConnection {
- override fun onServiceConnected(name: ComponentName?, service: IBinder?) {
- CoreServiceClient.coreService = (service as CoreService.McuServiceBinder).getService()
- }
-
- override fun onServiceDisconnected(name: ComponentName?) {
- CoreServiceClient.coreService = null
- }
- }
-
- fun connectToService() {
- Intent(context, CoreService::class.java).also { intent ->
- context.bindService(intent, serviceConnector, Context.BIND_AUTO_CREATE)
- }
- }
-
- fun disconnectFromService() {
- context.unbindService(serviceConnector)
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/McuEventObserver.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/McuEventObserver.kt
deleted file mode 100644
index b158aa2..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/McuEventObserver.kt
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.snaggly.ksw_toolkit.core.service.mcu
-
-import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
-
-interface McuEventObserver {
- fun update(eventType: EventManagerTypes?, cmdType: Int, data: ByteArray)
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/McuLogic.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/McuLogic.kt
index 6a10c84..55811df 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/McuLogic.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/McuLogic.kt
@@ -1,7 +1,6 @@
package com.snaggly.ksw_toolkit.core.service.mcu
import android.media.AudioManager
-import com.snaggly.ksw_toolkit.core.service.view.BackTapper
import com.wits.pms.statuscontrol.WitsStatus
import projekt.auto.mcu.ksw.model.McuStatus
import projekt.auto.mcu.ksw.serial.McuCommunicator
@@ -14,12 +13,12 @@ object McuLogic {
//Intern
private var autoVolume = false
- var senderInterval: Long = 1000
- var backTapper : BackTapper? = null
+ private var senderInterval: Long = 1000
//Param
- var speedMaxVolume = 80
- var minVolume = 0.75f
+ private var speedMaxVolume = 80
+ private var minVolume = 0.75f
+ var actionLock = false
init {
try{
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/McuReaderHandler.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/McuReaderHandler.kt
index 7738eb3..2302176 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/McuReaderHandler.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/McuReaderHandler.kt
@@ -1,51 +1,117 @@
package com.snaggly.ksw_toolkit.core.service.mcu
+import android.app.UiModeManager
import android.content.Context
import android.media.AudioManager
+import android.os.Build
+import com.snaggly.ksw_toolkit.IMcuListener
import com.snaggly.ksw_toolkit.core.config.ConfigManager
import com.snaggly.ksw_toolkit.core.service.adb.AdbServiceConnection
import com.snaggly.ksw_toolkit.core.service.mcu.action.EventAction
import com.snaggly.ksw_toolkit.core.service.mcu.action.EventActionLogger
import com.snaggly.ksw_toolkit.core.service.mcu.parser.*
import com.snaggly.ksw_toolkit.core.service.sys_observers.BrightnessObserver
-import com.snaggly.ksw_toolkit.core.service.view.BackTapper
import com.wits.pms.statuscontrol.PowerManagerApp
import projekt.auto.mcu.ksw.serial.reader.LogcatReader
import projekt.auto.mcu.ksw.serial.McuCommunicator
+import projekt.auto.mcu.ksw.serial.collection.McuCommands
import projekt.auto.mcu.ksw.serial.reader.SerialReader
+import projekt.auto.mcu.ksw.serial.writer.SerialWriter
class McuReaderHandler(private val context: Context) {
- private val mcuEventListeners = ArrayList()
- private val config = ConfigManager.getConfig(context.filesDir.absolutePath)
+ private var mcuEventListeners = ArrayList()
private val brightnessObserver = BrightnessObserver(context)
- private val sendingInterceptor = McuSenderInterceptor()
+ private val sendingInterceptor = McuSenderInterceptor(100)
private lateinit var eventAction : EventAction
- private var parseMcuEvent = McuEvent(ScreenSwitchEvent, CarDataEvent, BenzDataEvent)
+ private var parseMcuEvent = McuEvent(context)
private var hasSerialInit = false
+ val config = ConfigManager.getConfig(context.filesDir.absolutePath)
+
init {
- McuLogic.mcuCommunicator = McuCommunicator.getInstance()
+ when {
+ config.systemOptions.mcuPath != "" -> {
+ McuLogic.mcuCommunicator = McuCommunicator(SerialWriter(config.systemOptions.mcuPath), LogcatReader())
+ }
+ Build.VERSION.RELEASE.contains("11") -> {
+ McuLogic.mcuCommunicator = McuCommunicator(SerialWriter("/dev/ttyHS1"), LogcatReader())
+ }
+ Build.DISPLAY.contains("8937") -> {
+ McuLogic.mcuCommunicator = McuCommunicator(SerialWriter("/dev/ttyHSL1"), LogcatReader())
+ }
+ else -> {
+ McuLogic.mcuCommunicator = McuCommunicator.getInstance()
+ }
+ }
}
private val initialSerialStartAction = McuCommunicator.McuAction { cmdType, data ->
if (!hasSerialInit) {
- if (cmdType == 0x1C && data[0] == 0x1.toByte()) {
+ //Only set up serial reader when in Sysmode 1
+ if (data.isNotEmpty() && (cmdType == 0x1C && data[0] == 0x1.toByte())) {
hasSerialInit = true
McuLogic.mcuCommunicator!!.mcuReader.stopReading()
- AdbServiceConnection.stopKsw()
+ AdbServiceConnection.stopKsw(context)
+
+ //Initialize SerialReader
+ when {
+ config.systemOptions.mcuPath != "" -> {
+ McuLogic.mcuCommunicator!!.mcuReader = SerialReader(config.systemOptions.mcuPath)
+ }
+ Build.VERSION.RELEASE.contains("11") -> {
+ McuLogic.mcuCommunicator!!.mcuReader = SerialReader("/dev/ttyHS1")
+ }
+ Build.DISPLAY.contains("8937") -> {
+ McuLogic.mcuCommunicator!!.mcuReader = SerialReader("/dev/ttyHSL1")
+ }
+ else -> {
+ McuLogic.mcuCommunicator!!.mcuReader = SerialReader()
+ }
+ }
- if (config.systemTweaks.logMcuEvent.data)
- eventAction = EventActionLogger(context)
+ //Check if Service should handle extra Media Buttons
+ if (PowerManagerApp.getSettingsInt("CarDisplay") == 0) {
+ parseMcuEvent.screenSwitchEvent = ScreenSwitchEventNoOEMScreen
+ } else {
+ val dataBytes : ByteArray
+ if (config.systemOptions.extraMediaButtonHandle!!) {
+ parseMcuEvent.screenSwitchEvent = ScreenSwitchMediaHack
+ dataBytes = byteArrayOf(0x0e, 0x00)
+ } else {
+ parseMcuEvent.screenSwitchEvent = ScreenSwitchEvent
+ dataBytes = byteArrayOf(0x0e, 0x01)
+ }
+ McuLogic.mcuCommunicator?.sendCommand(0x70, dataBytes, false)
+ }
- if (config.systemTweaks.carDataLogging.data) {
- parseMcuEvent.carDataEvent = CarDataEventLogger
- parseMcuEvent.benzDataEvent = BenzDataEventLogger
+ //Is AutoTheme on? This service will be able to toggle global Android Dark/Light Theme
+ if (config.systemOptions.autoTheme!!) {
+ parseMcuEvent.carDataEvent.lightEvent = LightEventSwitch.apply {
+ uiModeManager = context.getSystemService(UiModeManager::class.java)
+ }
+ } else {
+ parseMcuEvent.carDataEvent.lightEvent = LightEvent
+ }
+
+ //Is NightBrightness on? This once Headlights turn on, the screen will dim to a given level.
+ parseMcuEvent.carDataEvent.lightEvent.hasNightBrightness = config.systemOptions.nightBrightness!!
+ if (config.systemOptions.nightBrightness!!) {
+ McuLogic.mcuCommunicator?.sendCommand(McuCommands.Set_Backlight_Control_On)
+ parseMcuEvent.carDataEvent.lightEvent.nightBrightnessLevel = config.systemOptions.nightBrightnessLevel!!
+ } else {
+ if (PowerManagerApp.getSettingsInt("Backlight_auto_set") == 0) {
+ McuLogic.mcuCommunicator?.sendCommand(McuCommands.Set_Backlight_Control_Off)
+ }
}
- McuLogic.mcuCommunicator!!.mcuReader = SerialReader()
+ //Is McuLogging on? Useful for Tasker to get Mcu Data from Logcat. Replicates CenterService procedure.
+ if (config.systemOptions.logMcuEvent!!)
+ eventAction = EventActionLogger(context)
+
McuLogic.mcuCommunicator!!.mcuReader.startReading(onMcuEventAction)
- if (config.systemTweaks.interceptMcuCommand.data) {
+ //Should this service intercept what CenterService tries to send to Mcu? Replicated core CenterService commands.
+ if (config.systemOptions.interceptMcuCommand!!) {
sendingInterceptor.startReading(fun(cmdType: Int, data: ByteArray) {
McuLogic.mcuCommunicator?.sendCommand(cmdType, data, false)
})
@@ -54,50 +120,63 @@ class McuReaderHandler(private val context: Context) {
brightnessObserver.startObservingBrightness()
}
- McuLogic.backTapper = BackTapper(context)
+ parseMcuEvent.idleEvent.armBackTapper()
+
+ //Get current CarData
+ McuLogic.mcuCommunicator!!.sendCommand(104, byteArrayOf(5, 0), false)
}
}
}
private val onMcuEventAction = McuCommunicator.McuAction { cmdType, data ->
Thread {
- val event = parseMcuEvent.getMcuEvent(cmdType, data)
- eventAction.processAction(cmdType, data, event, config)
-
- for (mcuEventListener in mcuEventListeners)
- mcuEventListener.update(event, cmdType, data)
+ if (cmdType != 0 || data.isNotEmpty()) {
+ val event = parseMcuEvent.getMcuEvent(cmdType, data)
+ eventAction.processAction(cmdType, data, event, config)
+
+ for (i in mcuEventListeners.indices) {
+ try {
+ mcuEventListeners[i].updateMcu(event.toString(), cmdType, data)
+ } catch (e: Exception) {
+ unregisterMcuEventListener(mcuEventListeners[i])
+ }
+ }
+ }
}.start()
}
fun startMcuReader() {
eventAction = EventAction(context)
- parseMcuEvent.carDataEvent = CarDataEvent
- parseMcuEvent.benzDataEvent = BenzDataEvent
- parseMcuEvent.screenSwitchEvent = if (PowerManagerApp.getSettingsInt("CarDisplay") == 0) {
- ScreenSwitchEventNoOEMScreen
- } else {
- ScreenSwitchEvent
- }
- AdbServiceConnection.startKsw()
+ //Start CenterService-McuService. If CenterService has to be hijacked, I need to wait until it's ready.
+ AdbServiceConnection.startKsw(context)
+ McuLogic.mcuCommunicator!!.mcuReader?.stopReading()
McuLogic.mcuCommunicator!!.mcuReader = LogcatReader()
- if (config.systemTweaks.kswService.data) {
- McuLogic.mcuCommunicator!!.mcuReader.startReading(onMcuEventAction)
- } else {
+ if (config.systemOptions.hijackCS!!) {
McuLogic.mcuCommunicator!!.mcuReader.startReading(initialSerialStartAction)
+ } else {
+ McuLogic.mcuCommunicator!!.mcuReader.startReading(onMcuEventAction)
}
- if (config.systemTweaks.autoVolume.data) {
+ //Is AutoVolume on? Start on it on its separate thread. This only works when CarData get parsed!
+ if (config.systemOptions.autoVolume!!) {
McuLogic.startAutoVolume(context.getSystemService(Context.AUDIO_SERVICE) as AudioManager)
}
}
fun stopReader() {
brightnessObserver.stopObservingBrightness()
- McuLogic.backTapper = null
+ parseMcuEvent.idleEvent.clearBackTapper()
McuLogic.stopAutoVolume()
McuLogic.mcuCommunicator?.stopBeat()
sendingInterceptor.stopReading()
+ if (PowerManagerApp.getSettingsInt("Backlight_auto_set") == 0) {
+ McuLogic.mcuCommunicator?.sendCommand(McuCommands.Set_Backlight_Control_Off)
+ }
+ if (config.systemOptions.extraMediaButtonHandle!! && PowerManagerApp.getSettingsInt("CarDisplay") == 0) {
+ val dataBytes = byteArrayOf(0x0e, 0x01)
+ McuLogic.mcuCommunicator?.sendCommand(0x70, dataBytes, false)
+ }
McuLogic.mcuCommunicator?.mcuReader?.stopReading()
hasSerialInit = false
}
@@ -107,11 +186,11 @@ class McuReaderHandler(private val context: Context) {
startMcuReader()
}
- fun registerMcuEventListener(listener: McuEventObserver) {
+ fun registerMcuEventListener(listener: IMcuListener) {
mcuEventListeners.add(listener)
}
- fun unregisterMcuEventListener(listener: McuEventObserver) {
+ fun unregisterMcuEventListener(listener: IMcuListener) {
mcuEventListeners.remove(listener)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/action/EventAction.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/action/EventAction.kt
index 1fa8b4f..6ab07d3 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/action/EventAction.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/action/EventAction.kt
@@ -8,6 +8,7 @@ import com.snaggly.ksw_toolkit.util.commander.KeyInjector
import com.snaggly.ksw_toolkit.util.commander.McuCommander
import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
import com.snaggly.ksw_toolkit.util.list.eventtype.EventMode
+import com.snaggly.ksw_toolkit.util.list.keyevent.KeyCode
import com.snaggly.ksw_toolkit.util.list.mcu.McuCommandsEnum
open class EventAction(private val context: Context) {
@@ -16,13 +17,14 @@ open class EventAction(private val context: Context) {
val eventConfig = config.eventManagers[event]
when (eventConfig?.eventMode) {
EventMode.KeyEvent -> {
- KeyInjector.sendKey(eventConfig.keyCode.data)
+ if (!(McuLogic.actionLock && eventConfig.keyCode == KeyCode.HOME.keycode))
+ KeyInjector.sendKey(eventConfig.keyCode!!)
}
EventMode.StartApp -> {
- AppStarter.launchAppById(eventConfig.appName.data, context)
+ AppStarter.launchAppById(eventConfig.appName!!, context)
}
EventMode.McuCommand -> {
- McuCommander.executeCommand(McuCommandsEnum.values[eventConfig.mcuCommandMode.data], McuLogic.mcuCommunicator, context)
+ McuCommander.executeCommand(McuCommandsEnum.values[eventConfig.mcuCommandMode!!], McuLogic.mcuCommunicator, context)
}
else -> {}
}
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/BenzDataEvent.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/BenzDataEvent.kt
deleted file mode 100644
index ab93c7c..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/BenzDataEvent.kt
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.snaggly.ksw_toolkit.core.service.mcu.parser
-
-import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
-
-object BenzDataEvent : IBenzDataEvent {
- override fun getBenzDataEvent(data: ByteArray): EventManagerTypes {
- return EventManagerTypes.BenzData
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/CarDataEvent.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/CarDataEvent.kt
deleted file mode 100644
index dc149ad..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/CarDataEvent.kt
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.snaggly.ksw_toolkit.core.service.mcu.parser
-
-import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
-
-object CarDataEvent : ICarDataEvent {
- override fun getCarDataEvent(data: ByteArray): EventManagerTypes {
- return EventManagerTypes.CarData
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/CarDataEventLogger.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/CarDataEventLogger.kt
index 4b4ce41..0862e9b 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/CarDataEventLogger.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/CarDataEventLogger.kt
@@ -3,13 +3,14 @@ package com.snaggly.ksw_toolkit.core.service.mcu.parser
import com.snaggly.ksw_toolkit.core.service.mcu.McuLogic
import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
-object CarDataEventLogger : ICarDataEvent {
+object CarDataEventLogger : ICarDataEvent() {
override fun getCarDataEvent(data: ByteArray): EventManagerTypes {
when {
data[0] == 0x19.toByte() -> {
McuLogic.mcuStat.carData.parseFromCarDataEvent(data)
}
data[0] == 0x10.toByte() -> {
+ lightEvent.getCarDataEvent(data)
McuLogic.mcuStat.carData.parseFromBrakeBeltEvent(data)
}
data[0] == 0x12.toByte() -> {
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/ICarDataEvent.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/ICarDataEvent.kt
index 9105790..bb4ee8f 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/ICarDataEvent.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/ICarDataEvent.kt
@@ -2,6 +2,7 @@ package com.snaggly.ksw_toolkit.core.service.mcu.parser
import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
-interface ICarDataEvent {
- fun getCarDataEvent(data: ByteArray) : EventManagerTypes
+abstract class ICarDataEvent {
+ companion object var lightEvent : ILightEvent = LightEvent
+ abstract fun getCarDataEvent(data: ByteArray) : EventManagerTypes
}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/ILightEvent.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/ILightEvent.kt
new file mode 100644
index 0000000..43022dc
--- /dev/null
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/ILightEvent.kt
@@ -0,0 +1,9 @@
+package com.snaggly.ksw_toolkit.core.service.mcu.parser
+
+import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
+
+interface ILightEvent {
+ fun getCarDataEvent(data: ByteArray) : EventManagerTypes
+ var hasNightBrightness : Boolean
+ var nightBrightnessLevel : Int
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/IMcuEvent.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/IMcuEvent.kt
index 125e986..e851eb0 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/IMcuEvent.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/IMcuEvent.kt
@@ -1,9 +1,13 @@
package com.snaggly.ksw_toolkit.core.service.mcu.parser
+import android.content.Context
import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
-abstract class IMcuEvent(var screenSwitchEvent: IScreenSwitchEvent, var carDataEvent: ICarDataEvent, var benzDataEvent: IBenzDataEvent) {
+abstract class IMcuEvent(context: Context) {
+ var benzDataEvent: IBenzDataEvent = BenzDataEventLogger
+ var carDataEvent: ICarDataEvent = CarDataEventLogger
+ var screenSwitchEvent: IScreenSwitchEvent = ScreenSwitchEvent
val buttonClickEvent = ButtonClickEvent
- val idleEvent = IdleEvent
+ val idleEvent = IdleEvent(context)
abstract fun getMcuEvent(cmdType: Int, data: ByteArray): EventManagerTypes?
}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/IScreenSwitchEvent.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/IScreenSwitchEvent.kt
index 5c40611..8861c76 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/IScreenSwitchEvent.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/IScreenSwitchEvent.kt
@@ -4,4 +4,6 @@ import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
interface IScreenSwitchEvent {
fun getScreenSwitch(data: ByteArray) : EventManagerTypes
+
+ var hasSoundRestorer : Boolean
}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/IdleEvent.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/IdleEvent.kt
index fa3912c..264a81b 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/IdleEvent.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/IdleEvent.kt
@@ -1,14 +1,40 @@
package com.snaggly.ksw_toolkit.core.service.mcu.parser
+import android.content.Context
import com.snaggly.ksw_toolkit.core.service.mcu.McuLogic
+import com.snaggly.ksw_toolkit.core.service.view.BackTapper
import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
-object IdleEvent {
+class IdleEvent(val context: Context) {
+ private var backTapper: BackTapper? = null
+ private var ticks = 0
+ private var wasInSys2 = false
+
+ fun armBackTapper() {
+ backTapper = BackTapper(context)
+ }
+
+ fun clearBackTapper() {
+ backTapper?.removeBackWindow()
+ backTapper = null
+ }
+
fun getIdleEvent(data: ByteArray) : EventManagerTypes {
if (data[0] == 0x1.toByte()) {
- McuLogic.backTapper?.removeBackWindow()
+ backTapper?.removeBackWindow()
+ if (wasInSys2) {
+ if (ticks >= 1) {
+ McuLogic.actionLock = false
+ wasInSys2 = false
+ ticks = 0
+ } else {
+ ticks++
+ }
+ }
} else {
- McuLogic.backTapper?.drawBackWindow(McuLogic.mcuCommunicator!!)
+ backTapper?.drawBackWindow(McuLogic.mcuCommunicator!!)
+ McuLogic.actionLock = true
+ wasInSys2 = true
}
return EventManagerTypes.Idle
}
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/LightEvent.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/LightEvent.kt
new file mode 100644
index 0000000..2cd9dcb
--- /dev/null
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/LightEvent.kt
@@ -0,0 +1,30 @@
+package com.snaggly.ksw_toolkit.core.service.mcu.parser
+
+import com.snaggly.ksw_toolkit.core.service.mcu.McuLogic
+import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
+import projekt.auto.mcu.ksw.serial.collection.McuCommands
+import kotlin.experimental.and
+
+object LightEvent : ILightEvent {
+ override fun getCarDataEvent(data: ByteArray): EventManagerTypes {
+ if (thisHasNightBrightness) {
+ if (data[1].and(7) == 0x05.toByte()) {
+ McuLogic.mcuCommunicator?.sendCommand(McuCommands.SetBrightnessLevel(thisNightBrightnessLevel.toByte()))
+ } else {
+ McuLogic.mcuCommunicator?.sendCommand(McuCommands.SetBrightnessLevel(100.toByte()))
+ }
+ }
+
+ return EventManagerTypes.CarData
+ }
+
+ override var hasNightBrightness: Boolean
+ get() = thisHasNightBrightness
+ set(value) {thisHasNightBrightness = value}
+ override var nightBrightnessLevel: Int
+ get() = thisNightBrightnessLevel
+ set(value) {thisNightBrightnessLevel = value}
+
+ private var thisHasNightBrightness : Boolean = false
+ private var thisNightBrightnessLevel : Int = 0
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/LightEventSwitch.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/LightEventSwitch.kt
new file mode 100644
index 0000000..dc5f74c
--- /dev/null
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/LightEventSwitch.kt
@@ -0,0 +1,37 @@
+package com.snaggly.ksw_toolkit.core.service.mcu.parser
+
+import android.app.UiModeManager
+import com.snaggly.ksw_toolkit.core.service.mcu.McuLogic
+import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
+import projekt.auto.mcu.ksw.serial.collection.McuCommands
+import kotlin.experimental.and
+
+object LightEventSwitch : ILightEvent {
+
+ var uiModeManager : UiModeManager? = null
+
+ override fun getCarDataEvent(data: ByteArray): EventManagerTypes {
+ if (data[1].and(7) > 1) {
+ uiModeManager?.nightMode = UiModeManager.MODE_NIGHT_YES
+ if(hasNightBrightness) {
+ McuLogic.mcuCommunicator?.sendCommand(McuCommands.SetBrightnessLevel(thisNightBrightnessLevel.toByte()))
+ }
+ } else {
+ uiModeManager?.nightMode = UiModeManager.MODE_NIGHT_NO
+ if(hasNightBrightness) {
+ McuLogic.mcuCommunicator?.sendCommand(McuCommands.SetBrightnessLevel(100.toByte()))
+ }
+ }
+ return EventManagerTypes.CarData
+ }
+
+ override var hasNightBrightness: Boolean
+ get() = thisHasNightBrightness
+ set(value) {thisHasNightBrightness = value}
+ override var nightBrightnessLevel: Int
+ get() = thisNightBrightnessLevel
+ set(value) {thisNightBrightnessLevel = value}
+
+ private var thisHasNightBrightness : Boolean = false
+ private var thisNightBrightnessLevel : Int = 0
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/McuEvent.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/McuEvent.kt
index 0d21807..7a01ae3 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/McuEvent.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/McuEvent.kt
@@ -1,9 +1,9 @@
package com.snaggly.ksw_toolkit.core.service.mcu.parser
-import com.snaggly.ksw_toolkit.core.service.mcu.McuLogic
+import android.content.Context
import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
-class McuEvent(screenSwitchEvent: IScreenSwitchEvent, carDataEvent: ICarDataEvent, benzDataEvent: IBenzDataEvent) : IMcuEvent(screenSwitchEvent, carDataEvent, benzDataEvent) {
+class McuEvent(context: Context) : IMcuEvent(context) {
override fun getMcuEvent(cmdType: Int, data: ByteArray): EventManagerTypes? {
when (cmdType) {
0xA1 -> {
@@ -11,8 +11,10 @@ class McuEvent(screenSwitchEvent: IScreenSwitchEvent, carDataEvent: ICarDataEven
return buttonClickEvent.getClickEvent(data)
} else if (data[0] == 0x1A.toByte() && data.size > 1) {
return screenSwitchEvent.getScreenSwitch(data)
+ } else if (data.size > 1) {
+ return carDataEvent.getCarDataEvent(data)
}
- return carDataEvent.getCarDataEvent(data)
+ return EventManagerTypes.CarData
}
0x1D -> return benzDataEvent.getBenzDataEvent(data)
0x1C -> return idleEvent.getIdleEvent(data)
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/ScreenSwitchEvent.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/ScreenSwitchEvent.kt
index 61c1ad0..4e3f244 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/ScreenSwitchEvent.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/ScreenSwitchEvent.kt
@@ -3,9 +3,22 @@ package com.snaggly.ksw_toolkit.core.service.mcu.parser
import com.snaggly.ksw_toolkit.core.service.mcu.McuLogic
import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
import projekt.auto.mcu.ksw.serial.collection.McuCommands
+import projekt.auto.mcu.ksw.serial.enums.SOUND_SRC_TYPE
object ScreenSwitchEvent : IScreenSwitchEvent {
override fun getScreenSwitch(data: ByteArray): EventManagerTypes {
+ if (data[1] == 0x1.toByte()) {
+ if (thisHasSoundRestorer) {
+ McuLogic.mcuCommunicator!!.sendCommand(McuCommands.SetMusicSource(SOUND_SRC_TYPE.SRC_ATSL_AIRCONSOLE))
+ }
+ }
+
return EventManagerTypes.ScreenSwitch
}
+
+ override var hasSoundRestorer: Boolean
+ get() = thisHasSoundRestorer
+ set(value) {thisHasSoundRestorer = value}
+
+ private var thisHasSoundRestorer : Boolean = false
}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/ScreenSwitchEventNoOEMScreen.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/ScreenSwitchEventNoOEMScreen.kt
index 9d6cdc2..560326f 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/ScreenSwitchEventNoOEMScreen.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/ScreenSwitchEventNoOEMScreen.kt
@@ -3,15 +3,25 @@ package com.snaggly.ksw_toolkit.core.service.mcu.parser
import com.snaggly.ksw_toolkit.core.service.mcu.McuLogic
import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
import projekt.auto.mcu.ksw.serial.collection.McuCommands
+import projekt.auto.mcu.ksw.serial.enums.SOUND_SRC_TYPE
object ScreenSwitchEventNoOEMScreen : IScreenSwitchEvent {
override fun getScreenSwitch(data: ByteArray): EventManagerTypes {
if (data[1] == 0x1.toByte()) {
McuLogic.mcuCommunicator!!.sendCommand(McuCommands.SYS_SCREEN_ON)
+ if (thisHasSoundRestorer) {
+ McuLogic.mcuCommunicator!!.sendCommand(McuCommands.SetMusicSource(SOUND_SRC_TYPE.SRC_ATSL_AIRCONSOLE))
+ }
} else if (data[1] == 0x2.toByte()) {
McuLogic.mcuCommunicator!!.sendCommand(McuCommands.SYS_SCREEN_OFF)
}
return EventManagerTypes.ScreenSwitch
}
+
+ override var hasSoundRestorer: Boolean
+ get() = thisHasSoundRestorer
+ set(value) {thisHasSoundRestorer = value}
+
+ private var thisHasSoundRestorer : Boolean = false
}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/ScreenSwitchMediaHack.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/ScreenSwitchMediaHack.kt
new file mode 100644
index 0000000..ead5e1c
--- /dev/null
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/mcu/parser/ScreenSwitchMediaHack.kt
@@ -0,0 +1,32 @@
+package com.snaggly.ksw_toolkit.core.service.mcu.parser
+
+import com.snaggly.ksw_toolkit.core.service.mcu.McuLogic
+import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
+import projekt.auto.mcu.ksw.serial.collection.McuCommands
+import projekt.auto.mcu.ksw.serial.enums.SOUND_SRC_TYPE
+
+object ScreenSwitchMediaHack : IScreenSwitchEvent {
+ private val enableOEM = byteArrayOf(0x0e, 0x01)
+ private val disableOEM = byteArrayOf(0x0e, 0x00)
+ private var switchLock = false
+
+ override fun getScreenSwitch(data: ByteArray): EventManagerTypes {
+ if (data[1] == 0x1.toByte()) {
+ switchLock = false
+ McuLogic.mcuCommunicator!!.sendCommand(0x70, disableOEM, false)
+ McuLogic.mcuCommunicator!!.sendCommand(McuCommands.SetMusicSource(SOUND_SRC_TYPE.SRC_ATSL_AIRCONSOLE))
+ } else if (data[1] == 0x2.toByte() && !switchLock) {
+ switchLock = true
+ McuLogic.mcuCommunicator!!.sendCommand(0x70, enableOEM, false)
+ McuLogic.mcuCommunicator!!.sendCommand(McuCommands.SWITCH_TO_OEM)
+ }
+
+ return EventManagerTypes.ScreenSwitch
+ }
+
+ override var hasSoundRestorer: Boolean
+ get() = thisHasSoundRestorer
+ set(value) {thisHasSoundRestorer = value}
+
+ private var thisHasSoundRestorer : Boolean = false
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/remote/KSWToolKitService.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/remote/KSWToolKitService.kt
new file mode 100644
index 0000000..be13dc7
--- /dev/null
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/remote/KSWToolKitService.kt
@@ -0,0 +1,180 @@
+package com.snaggly.ksw_toolkit.core.service.remote
+
+import android.content.Context
+import android.content.Intent
+import com.snaggly.ksw_toolkit.IKSWToolKitService
+import com.snaggly.ksw_toolkit.IMcuListener
+import com.snaggly.ksw_toolkit.core.config.beans.EventManager
+import com.snaggly.ksw_toolkit.core.service.CoreService
+import com.snaggly.ksw_toolkit.core.service.mcu.McuLogic
+import com.snaggly.ksw_toolkit.core.service.mcu.McuReaderHandler
+import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
+import com.snaggly.ksw_toolkit.util.list.eventtype.EventMode
+
+class KSWToolKitService(private val serviceContext: Context, private val coreReaderHandler: McuReaderHandler) : IKSWToolKitService.Stub() {
+
+ private val configManager = coreReaderHandler.config
+
+ override fun sendMcuCommand(cmdType: Int, data: ByteArray?): Boolean {
+ if (!authenticate())
+ return false
+
+ return if (McuLogic.mcuCommunicator == null)
+ false
+ else {
+ McuLogic.mcuCommunicator!!.sendCommand(cmdType, data, false)
+ true
+ }
+ }
+
+ override fun changeBtnConfig(btnType: Int, cmdType: Int, cmdValue: String?): Boolean {
+ if (!authenticate())
+ return false
+
+ val eventConfig = configManager.eventManagers[EventManagerTypes.values()[btnType]]
+ if (eventConfig == null)
+ return false
+ else {
+ eventConfig.eventMode = EventMode.values()[cmdType]
+ when (eventConfig.eventMode) {
+ EventMode.NoAssignment -> {
+ eventConfig.appName = ""
+ eventConfig.keyCode = -1
+ eventConfig.mcuCommandMode = -1
+ }
+ EventMode.KeyEvent -> {
+ try {
+ val cmdValueInt = cmdValue!!.toInt()
+ eventConfig.appName = ""
+ eventConfig.keyCode = cmdValueInt
+ eventConfig.mcuCommandMode = -1
+ } catch (e: Exception) {
+ eventConfig.eventMode = EventMode.NoAssignment
+ return false
+ }
+ }
+ EventMode.StartApp -> {
+ try {
+ eventConfig.appName = cmdValue!!
+ eventConfig.keyCode = -1
+ eventConfig.mcuCommandMode = -1
+ } catch (e: Exception) {
+ eventConfig.eventMode = EventMode.NoAssignment
+ return false
+ }
+ }
+ EventMode.McuCommand -> {
+ try {
+ val cmdValueInt = cmdValue!!.toInt()
+ eventConfig.appName = ""
+ eventConfig.keyCode = -1
+ eventConfig.mcuCommandMode = cmdValueInt
+ } catch (e: Exception) {
+ eventConfig.eventMode = EventMode.NoAssignment
+ return false
+ }
+ }
+ }
+ }
+ configManager.saveConfig()
+ return true
+ }
+
+ override fun setDefaultBtnLayout() {
+ configManager.eventManagers = EventManager.initStandardButtons()
+ configManager.saveConfig()
+ }
+
+ override fun getConfig(): String? {
+ return configManager.json
+ }
+
+ override fun setOptions(allSettings: BooleanArray?): Boolean {
+ if (!authenticate())
+ return false
+ if (allSettings == null)
+ return false
+ if (allSettings.size < 10) {
+ return false
+ }
+
+ configManager.systemOptions.startAtBoot = allSettings[0]
+ configManager.systemOptions.hijackCS = allSettings[1]
+ configManager.systemOptions.soundRestorer = allSettings[2]
+ configManager.systemOptions.autoTheme = allSettings[3]
+ configManager.systemOptions.autoVolume = allSettings[4]
+ configManager.systemOptions.maxVolume = allSettings[5]
+ configManager.systemOptions.logMcuEvent = allSettings[6]
+ configManager.systemOptions.interceptMcuCommand = allSettings[7]
+ configManager.systemOptions.extraMediaButtonHandle = allSettings[8]
+ configManager.systemOptions.nightBrightness = allSettings[9]
+
+ configManager.saveConfig()
+
+ coreReaderHandler.restartReader()
+ return true
+ }
+
+ override fun getSettingsTypes(): Array? {
+ return arrayOf(
+ "Enabled",
+ "HijackCenterService",
+ "SoundRestorer",
+ "AutoTheme",
+ "AutoVolume",
+ "MaxVolumeAtBoot",
+ "LogMcuEvents",
+ "InterceptMcuCommands",
+ "EnableExtendedIDrive",
+ "NightBrightness"
+ )
+ }
+
+ override fun setMcuPath(path: String?) : Boolean {
+ return if (path != null) {
+ configManager.systemOptions.mcuPath = path
+ coreReaderHandler.restartReader()
+ true
+ } else {
+ false
+ }
+ }
+
+ override fun registerMcuListener(listener: IMcuListener?): Boolean {
+ if (!authenticate())
+ return false
+ return if (listener != null) {
+ coreReaderHandler.registerMcuEventListener(listener)
+ true
+ } else false
+ }
+
+ override fun unregisterMcuListener(listener: IMcuListener?): Boolean {
+ return if (listener != null) {
+ coreReaderHandler.unregisterMcuEventListener(listener)
+ true
+ } else false
+ }
+
+ override fun getNightBrightnessSetting(): Int {
+ return configManager.systemOptions.nightBrightnessLevel!!
+ }
+
+ override fun setNightBrightnessSetting(value: Int) {
+ configManager.systemOptions.nightBrightnessLevel = value
+ configManager.saveConfig()
+ coreReaderHandler.restartReader()
+ }
+
+ private fun authenticate() : Boolean {
+ if (!ServiceValidation.hasAuthenticated) {
+ return if (ServiceValidation.validate(serviceContext)) {
+ true
+ } else {
+ serviceContext.stopService(Intent(serviceContext, CoreService::class.java))
+ false
+ }
+ }
+ return true
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/remote/ServiceValidation.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/remote/ServiceValidation.kt
new file mode 100644
index 0000000..d2a9f2c
--- /dev/null
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/remote/ServiceValidation.kt
@@ -0,0 +1,72 @@
+package com.snaggly.ksw_toolkit.core.service.remote
+
+import android.app.ActivityManager
+import android.app.Service
+import android.content.Context
+import android.os.Binder
+import projekt.auto.mcu.encryption.Base64
+import java.security.KeyFactory
+import java.security.PublicKey
+import java.security.Signature
+import java.security.spec.X509EncodedKeySpec
+
+object ServiceValidation {
+ var hasAuthenticated = false
+ var signature : ByteArray? = null
+
+ fun validate(context: Context) : Boolean {
+ hasAuthenticated = false
+ if (signature==null) return false
+ val packageName = context.packageManager.getNameForUid(Binder.getCallingUid()) ?: return false
+ if (packageName in allowedPackages)
+ return true
+ val s = Signature.getInstance("SHA256withRSA/PSS").apply {
+ initVerify(getPublicKey())
+ update(packageName.toByteArray())
+ }
+
+ if (s.verify(signature)) {
+ hasAuthenticated = true
+ return true
+ }
+
+ return false
+ }
+
+
+
+ private fun getPackageNames(context: Context, pid: Int): Array? {
+ val am = context.getSystemService(Service.ACTIVITY_SERVICE) as ActivityManager
+ val infos = am.runningAppProcesses
+ if (infos != null && infos.size > 0) {
+ for (info in infos) {
+ if (info.pid == pid) {
+ return info.pkgList
+ }
+ }
+ }
+ return null
+ }
+
+ private fun getPublicKey() : PublicKey {
+ return KeyFactory.getInstance("RSA")
+ .generatePublic(
+ X509EncodedKeySpec(
+ Base64.decode(publicKeyBase64, Base64.DEFAULT)
+ )
+ )
+ }
+
+ private val allowedPackages : Array = arrayOf(
+ "com.snaggly.wits.ksw_toolkit.client"
+ )
+
+ private const val publicKeyBase64 =
+ "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3EJuFxL6kgtGpXRmt20e" +
+ "qUfiBQTZiMZyWMhzhwgtHpkcX6RXKiVaqLy0iTvRL7QxfyJcgLAaxYh7e1iS3SHm" +
+ "4cbMCpmF3CvcfAmaCmVmoocUE3GwXzdSifUcia8XNXiEN8V0polYKMGV6lvbqVFg" +
+ "qpZtZOsznidlJ6clbDJlSV8EJBoRFw0LsFSvN9BB4LRL0Q+uFEQek5qkJt2VpoBu" +
+ "syHc09+BIr0X/rFpxZPdkBnI5Uy8+0g0aJmEFPwhlP2jSiC4yHq/zzXusiDlqT1/" +
+ "iRQN1XXaJAhgHdFD3HA37fVIAuSUKshcW/0T9xrxp+PDCXZPj1aCFekKnXzaqsgM" +
+ "RwIDAQAB"
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/sys_observers/NaviAppObserver.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/sys_observers/NaviAppObserver.kt
deleted file mode 100644
index 203d8cd..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/sys_observers/NaviAppObserver.kt
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.snaggly.ksw_toolkit.core.service.sys_observers
-
-import android.content.Context
-import android.database.ContentObserver
-import android.os.Handler
-import android.provider.Settings
-import com.snaggly.ksw_toolkit.core.service.mcu.McuLogic
-import projekt.auto.mcu.ksw.serial.collection.McuCommands
-
-class NaviAppObserver(private val context: Context) {
-
- private val naviObserver = object : ContentObserver(Handler(context.mainLooper)) {
- override fun onChange(selfChanged: Boolean) {
- val isUsingNavi = Settings.System.getInt(context.contentResolver, "usingNavi") == 1
- if (isUsingNavi){
- McuLogic.mcuCommunicator?.sendCommand(McuCommands.Start_Voice)
- }
- else {
- McuLogic.mcuCommunicator?.sendCommand(McuCommands.Stop_Voice)
- }
- }
- }
-
- fun startHandlingNaviCallouts() {
- context.contentResolver.registerContentObserver(Settings.System.getUriFor("usingNavi"), true, naviObserver)
- }
-
- fun stopHandlingNaviCallouts() {
- context.contentResolver.unregisterContentObserver(naviObserver)
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/view/BackTapper.kt b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/view/BackTapper.kt
index f579364..7ac02e6 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/core/service/view/BackTapper.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/core/service/view/BackTapper.kt
@@ -24,7 +24,7 @@ class BackTapper(val context: Context) {
handler.post {
val windowParam = WindowManager.LayoutParams()
windowParam.apply {
- type = 2010
+ type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR
flags = windowParam.flags.or(1024).or(262144).or(524288)
height = -1
width = -1
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/gui/AdbShell.kt b/app/src/main/java/com/snaggly/ksw_toolkit/gui/AdbShell.kt
deleted file mode 100644
index 768032e..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/gui/AdbShell.kt
+++ /dev/null
@@ -1,82 +0,0 @@
-package com.snaggly.ksw_toolkit.gui
-
-import android.os.Bundle
-import android.util.Log
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.ArrayAdapter
-import android.widget.Button
-import android.widget.ListView
-import androidx.fragment.app.Fragment
-import androidx.lifecycle.ViewModelProvider
-import com.google.android.material.textfield.TextInputEditText
-import com.snaggly.ksw_toolkit.R
-import com.snaggly.ksw_toolkit.core.service.CoreService
-import com.snaggly.ksw_toolkit.core.service.adb.ShellObserver
-import com.snaggly.ksw_toolkit.gui.viewmodels.AdbShellViewModel
-
-class AdbShell : Fragment() {
-
- private val adbShellObserver = object : ShellObserver {
- override fun update(newLine: String) {
- requireActivity().runOnUiThread {
- adbLines[0] += newLine
- listAdapter.notifyDataSetChanged()
- }
- }
- }
-
- companion object {
- fun newInstance() = AdbShell()
- }
-
- private lateinit var viewModel: AdbShellViewModel
- private lateinit var shellListView: ListView
- private lateinit var textInput: TextInputEditText
- private lateinit var sendButton: Button
- private lateinit var listAdapter: ArrayAdapter
- private val adbLines : ArrayList = arrayListOf("")
-
- override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?): View? {
- return inflater.inflate(R.layout.adb_shell_fragment, container, false)
- }
-
- override fun onActivityCreated(savedInstanceState: Bundle?) {
- super.onActivityCreated(savedInstanceState)
- viewModel = ViewModelProvider(this).get(AdbShellViewModel::class.java)
- initElements()
- initClickEvent()
- }
-
- override fun onStart() {
- super.onStart()
- sendButton.requestFocus()
- initList()
- viewModel.coreService?.adbConnection!!.registerShellListener(adbShellObserver)
- }
-
- override fun onStop() {
- super.onStop()
- viewModel.coreService?.adbConnection!!.unregisterShellListener(adbShellObserver)
- }
-
- private fun initElements() {
- shellListView = requireView().findViewById(R.id.adbShellStdoutListView)
- textInput = requireView().findViewById(R.id.adbEditText)
- sendButton = requireView().findViewById(R.id.adbSend)
- }
-
- private fun initList() {
- listAdapter = ArrayAdapter(requireContext(), android.R.layout.simple_list_item_1, adbLines)
- shellListView.adapter = listAdapter
- }
-
- private fun initClickEvent() {
- sendButton.setOnClickListener {
- viewModel.coreService?.adbConnection!!.sendCommand(textInput.text.toString())
- textInput.setText("")
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/gui/ConfigImportExport.kt b/app/src/main/java/com/snaggly/ksw_toolkit/gui/ConfigImportExport.kt
deleted file mode 100644
index d5ad3be..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/gui/ConfigImportExport.kt
+++ /dev/null
@@ -1,80 +0,0 @@
-package com.snaggly.ksw_toolkit.gui
-
-import android.app.AlertDialog
-import androidx.lifecycle.ViewModelProvider
-import android.os.Bundle
-import android.os.Environment
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.view.WindowManager
-import android.widget.Button
-import android.widget.Toast
-import androidx.fragment.app.Fragment
-import com.snaggly.ksw_toolkit.R
-import com.snaggly.ksw_toolkit.core.config.ConfigManager
-import com.snaggly.ksw_toolkit.gui.viewmodels.ConfigImportExportViewModel
-
-class ConfigImportExport : Fragment() {
-
- companion object {
- fun newInstance() = ConfigImportExport()
- }
-
- private lateinit var importExportViewModel: ConfigImportExportViewModel
- private lateinit var importConfigBtn: Button
- private lateinit var exportConfigBtn: Button
- private lateinit var restartBtn: Button
-
- override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?): View? {
- return inflater.inflate(R.layout.config_fragment, container, false)
- }
-
- override fun onActivityCreated(savedInstanceState: Bundle?) {
- super.onActivityCreated(savedInstanceState)
- importExportViewModel = ViewModelProvider(this).get(ConfigImportExportViewModel::class.java)
- initBtns()
- initBtnClicks()
- }
-
- private fun initBtns() {
- importConfigBtn = requireView().findViewById(R.id.importConfigBtn)
- exportConfigBtn = requireView().findViewById(R.id.exportConfigBtn)
- restartBtn = requireView().findViewById(R.id.restartSystemBtn)
- }
-
- private fun initBtnClicks() {
- importConfigBtn.setOnClickListener {
- try {
- Toast.makeText(requireContext(), "Imported from: ${importExportViewModel.importConfig(requireContext())}", Toast.LENGTH_LONG).show()
- } catch (exception: Exception) {
- val alertExc = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit-Config")
- .setMessage("Unable to import!\n\n${exception.localizedMessage}").create()
- alertExc.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alertExc.show()
- }
- }
- exportConfigBtn.setOnClickListener {
- try {
- Toast.makeText(requireContext(), "Exported to: ${importExportViewModel.exportConfig(requireContext())}", Toast.LENGTH_LONG).show()
- } catch (exception: Exception) {
- val alertExc = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit-Config")
- .setMessage("Unable to export!\n\n${exception.localizedMessage}").create()
- alertExc.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alertExc.show()
- }
- }
- restartBtn.setOnClickListener {
- try {
- importExportViewModel.restartSystem()
- } catch (exception: Exception) {
- val alertExc = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit-Config")
- .setMessage("Unable to restart!\n\n${exception.localizedMessage}").create()
- alertExc.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alertExc.show()
- }
- }
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/gui/EventManager.kt b/app/src/main/java/com/snaggly/ksw_toolkit/gui/EventManager.kt
deleted file mode 100644
index 98479bf..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/gui/EventManager.kt
+++ /dev/null
@@ -1,148 +0,0 @@
-package com.snaggly.ksw_toolkit.gui
-
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.Button
-import androidx.fragment.app.Fragment
-import androidx.lifecycle.ViewModelProvider
-import com.snaggly.ksw_toolkit.R
-import com.snaggly.ksw_toolkit.gui.viewmodels.EventManagerViewModel
-import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
-import com.snaggly.ksw_toolkit.util.list.eventtype.EventMode
-
-class EventManager : Fragment() {
- private var previousBtn : Button? = null
- private var previousTypes: EventManagerTypes? = null
-
- private lateinit var telephoneBtn : Button
- private lateinit var telephoneHangUpBtn : Button
- private lateinit var telephoneLongBtn : Button
- private lateinit var voiceBtn : Button
- private lateinit var mediaPreviousBtn : Button
- private lateinit var mediaNextBtn : Button
- private lateinit var mediaPauseBtn : Button
- private lateinit var volumeDecBtn : Button
- private lateinit var volumeIncBtn : Button
- private lateinit var modeBtn : Button
- private lateinit var knobPressBtn : Button
- private lateinit var knobTiltUpBtn : Button
- private lateinit var knobTiltDownBtn : Button
- private lateinit var knobTiltLeftBtn : Button
- private lateinit var knobTiltRightBtn : Button
- private lateinit var knobTurnLeftBtn : Button
- private lateinit var knobTurnRightBtn : Button
- private lateinit var menuBtn : Button
- private lateinit var backBtn : Button
- private lateinit var optionsBtn : Button
- private lateinit var naviBtn : Button
-
- private lateinit var activeFragment: EventManagerSelectAction
- private lateinit var mViewModel: EventManagerViewModel
-
- private var hasOpenedSelectAction = false
-
- override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?): View? {
- return inflater.inflate(R.layout.event_manager_fragment, container, false)
- }
-
- override fun onActivityCreated(savedInstanceState: Bundle?) {
- super.onActivityCreated(savedInstanceState)
- mViewModel = ViewModelProvider(this).get(EventManagerViewModel::class.java)
- initBtns()
- initBtnClick()
- voiceBtn.requestFocus()
- }
-
- private fun initBtns() {
- telephoneBtn = requireView().findViewById(R.id.telefonBtn)
- telephoneHangUpBtn = requireView().findViewById(R.id.telefonHangUpBtn)
- telephoneLongBtn = requireView().findViewById(R.id.telefonLongPressBtn)
- voiceBtn = requireView().findViewById(R.id.voiceBtn)
- mediaPreviousBtn = requireView().findViewById(R.id.mediaPreviousBtn)
- mediaNextBtn = requireView().findViewById(R.id.mediaNextBtn)
- mediaPauseBtn = requireView().findViewById(R.id.mediaPauseBtn)
- volumeDecBtn = requireView().findViewById(R.id.volumeDecBtn)
- volumeIncBtn = requireView().findViewById(R.id.volumeIncBtn)
- modeBtn = requireView().findViewById(R.id.modeBtn)
- knobPressBtn = requireView().findViewById(R.id.knobPressBtn)
- knobTiltUpBtn = requireView().findViewById(R.id.knobTiltUpBtn)
- knobTiltDownBtn = requireView().findViewById(R.id.knobTiltDownBtn)
- knobTiltLeftBtn = requireView().findViewById(R.id.knobTiltLeftBtn)
- knobTiltRightBtn = requireView().findViewById(R.id.knobTiltRightBtn)
- knobTurnLeftBtn = requireView().findViewById(R.id.knobTurnLeftBtn)
- knobTurnRightBtn = requireView().findViewById(R.id.knobTurnRightBtn)
- menuBtn = requireView().findViewById(R.id.menuButtonBtn)
- backBtn = requireView().findViewById(R.id.backButtonBtn)
- optionsBtn = requireView().findViewById(R.id.optionsButtonBtn)
- naviBtn = requireView().findViewById(R.id.navigationButtonBtn)
- }
-
- private fun initBtnClick() {
- setOnClickEvent(telephoneBtn, EventManagerTypes.TelephoneButton)
- setOnClickEvent(telephoneHangUpBtn, EventManagerTypes.TelephoneButtonHangUp)
- setOnClickEvent(telephoneLongBtn, EventManagerTypes.TelephoneButtonLongPress)
- setOnClickEvent(voiceBtn, EventManagerTypes.VoiceCommandButton)
- setOnClickEvent(mediaPreviousBtn, EventManagerTypes.MediaPrevious)
- setOnClickEvent(mediaNextBtn, EventManagerTypes.MediaNext)
- setOnClickEvent(mediaPauseBtn, EventManagerTypes.MediaPlayPause)
- setOnClickEvent(volumeDecBtn, EventManagerTypes.VolumeDecrease)
- setOnClickEvent(volumeIncBtn, EventManagerTypes.VolumeIncrease)
- setOnClickEvent(modeBtn, EventManagerTypes.ModeButton)
- setOnClickEvent(knobPressBtn, EventManagerTypes.KnobPress)
- setOnClickEvent(knobTiltUpBtn, EventManagerTypes.KnobTiltUp)
- setOnClickEvent(knobTiltDownBtn, EventManagerTypes.KnobTiltDown)
- setOnClickEvent(knobTiltLeftBtn, EventManagerTypes.KnobTiltLeft)
- setOnClickEvent(knobTiltRightBtn, EventManagerTypes.KnobTiltRight)
- setOnClickEvent(knobTurnLeftBtn, EventManagerTypes.KnobTurnLeft)
- setOnClickEvent(knobTurnRightBtn, EventManagerTypes.KnobTurnRight)
- setOnClickEvent(menuBtn, EventManagerTypes.MenuButton)
- setOnClickEvent(backBtn, EventManagerTypes.BackButton)
- setOnClickEvent(optionsBtn, EventManagerTypes.OptionsButton)
- setOnClickEvent(naviBtn, EventManagerTypes.NavigationButton)
- }
-
- private fun setBtnLabel(button: Button, eventManagerTypes: EventManagerTypes) {
- if (mViewModel.getConfig(requireContext())[eventManagerTypes]?.eventMode != EventMode.NoAssignment)
- button.text = getString(R.string.assigned)
- else
- button.text = getString(R.string.unassigned)
- }
-
- private fun setOnClickEvent(button: Button, types: EventManagerTypes) {
- setBtnLabel(button, types)
- button.setOnClickListener {
- if (hasOpenedSelectAction)
- previousBtn?.let { setBtnLabel(it, previousTypes!!) }
- previousBtn = button
- previousTypes = types
- hasOpenedSelectAction = true
- activeFragment = EventManagerSelectAction(types, object : OnActionResult {
- override fun notifyView() {
- setBtnLabel(button, types)
- childFragmentManager.beginTransaction()
- .setCustomAnimations(R.anim.slide_enter_right_left, R.anim.slide_exit_right_left)
- .remove(activeFragment)
- .commit()
- button.requestFocus()
- hasOpenedSelectAction = false
- }
- })
- button.text = "..."
- childFragmentManager.beginTransaction()
- .setCustomAnimations(R.anim.slide_enter_right_left, R.anim.slide_exit_right_left)
- .replace(R.id.eventManagerSelectActionFrame, activeFragment)
- .commit()
- }
- }
-
- companion object {
- fun newInstance() = EventManager()
- }
-
- interface OnActionResult{
- fun notifyView()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/gui/EventManagerSelectAction.kt b/app/src/main/java/com/snaggly/ksw_toolkit/gui/EventManagerSelectAction.kt
deleted file mode 100644
index ac5ec93..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/gui/EventManagerSelectAction.kt
+++ /dev/null
@@ -1,219 +0,0 @@
-package com.snaggly.ksw_toolkit.gui
-
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.view.animation.Animation
-import android.view.animation.AnimationUtils
-import android.widget.CompoundButton
-import android.widget.RadioButton
-import androidx.fragment.app.Fragment
-import androidx.lifecycle.ViewModelProvider
-import androidx.recyclerview.widget.LinearLayoutManager
-import androidx.recyclerview.widget.RecyclerView
-import com.snaggly.ksw_toolkit.R
-import com.snaggly.ksw_toolkit.gui.viewmodels.EventManagerSelectActionViewModel
-import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
-import com.snaggly.ksw_toolkit.util.list.eventtype.EventMode
-
-class EventManagerSelectAction(private val type: EventManagerTypes, private val actionEvent: EventManager.OnActionResult) : Fragment() {
- private lateinit var mViewModel: EventManagerSelectActionViewModel
- private lateinit var listKeyEvents: RecyclerView
- private lateinit var listApps: RecyclerView
- private lateinit var listMcuCommands: RecyclerView
-
- private lateinit var doNothingButton: RadioButton
- private lateinit var invokeKeyButton: RadioButton
- private lateinit var startAppButton: RadioButton
- private lateinit var mcuCommandsButton: RadioButton
-
- private lateinit var leaveToTopAnimation : Animation
- private lateinit var leaveToButtomAnimation : Animation
- private lateinit var enterFromTopAnimation : Animation
- private lateinit var enterFromButtomAnimation : Animation
-
- private var mode: ActionMode = ActionMode.DoNothing
-
- override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?): View? {
- return inflater.inflate(R.layout.event_manager_select_action_fragment, container, false)
- }
-
- override fun onActivityCreated(savedInstanceState: Bundle?) {
- super.onActivityCreated(savedInstanceState)
- mViewModel = ViewModelProvider(this).get(EventManagerSelectActionViewModel::class.java)
- mViewModel.eventCurType = type
- mViewModel.actionEvent = actionEvent
- initRadioBtns()
- initLists()
- loadAnimations(300)
- doButtonEvents()
- preselectEvent()
- doNothingButton.requestFocus()
- }
-
- private fun initRadioBtns() {
- doNothingButton = requireView().findViewById(R.id.unnassignBtn)
- invokeKeyButton = requireView().findViewById(R.id.invokeKeyeventRadioButton)
- startAppButton = requireView().findViewById(R.id.startAppRadioButton)
- mcuCommandsButton = requireView().findViewById(R.id.sendMcuCommandBtn)
- }
-
- private fun initLists() {
- listKeyEvents = requireView().findViewById(R.id.availableKeyEventsListView)
- listApps = requireView().findViewById(R.id.availableAppsListView)
- listMcuCommands = requireView().findViewById(R.id.mcuCommandsListView)
- initRecyclerViews(listKeyEvents, context?.let { mViewModel.getListKeyEventsAdapter(it) }!!)
- initRecyclerViews(listApps, context?.let { mViewModel.getAvailableAppsAdapter(it) }!!)
- initRecyclerViews(listMcuCommands, context?.let { mViewModel.getMcuCommandsAdapter(it) }!!)
- }
-
- private fun loadAnimations(duration: Long) {
- leaveToTopAnimation = AnimationUtils.loadAnimation(context, R.anim.leave_to_top)
- leaveToTopAnimation.duration = duration
- leaveToButtomAnimation = AnimationUtils.loadAnimation(context, R.anim.leave_to_buttom)
- leaveToButtomAnimation.duration = duration
- enterFromTopAnimation = AnimationUtils.loadAnimation(context, R.anim.enter_from_top)
- enterFromTopAnimation.duration = duration
- enterFromButtomAnimation = AnimationUtils.loadAnimation(context, R.anim.enter_from_buttom)
- enterFromButtomAnimation.duration = duration
- }
-
- private fun initRecyclerViews(rv : RecyclerView, rvAdapterView: RecyclerView.Adapter) {
- rv.setHasFixedSize(true)
- rv.layoutManager = LinearLayoutManager(context)
- rv.adapter = rvAdapterView
- }
-
- private fun doButtonEvents() {
- doNothingButton.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean ->
- if (isChecked) {
- when (mode) {
- ActionMode.InvokeKeyEvent -> {
- invokeKeyButton.isChecked = false
- listKeyEvents.clearAnimation()
- listKeyEvents.startAnimation(leaveToTopAnimation)
- listKeyEvents.visibility = View.GONE
- }
- ActionMode.StartApp -> {
- startAppButton.isChecked = false
- listApps.clearAnimation()
- listApps.startAnimation((leaveToTopAnimation))
- listApps.visibility = View.GONE
- }
- ActionMode.SendMcuCommand -> {
- mcuCommandsButton.isChecked = false
- listMcuCommands.clearAnimation()
- listMcuCommands.startAnimation((leaveToTopAnimation))
- listMcuCommands.visibility = View.GONE
- }
- else -> {}
- }
- mode = ActionMode.DoNothing
- mViewModel.resetEvent()
- actionEvent.notifyView()
- }
- }
- invokeKeyButton.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean ->
- if (isChecked) {
- listKeyEvents.visibility = View.VISIBLE
- listKeyEvents.startAnimation(enterFromTopAnimation)
-
- when (mode) {
- ActionMode.StartApp -> {
- startAppButton.isChecked = false
- listApps.clearAnimation()
- listApps.visibility = View.GONE
- listApps.startAnimation(leaveToButtomAnimation)
- }
- ActionMode.SendMcuCommand -> {
- mcuCommandsButton.isChecked = false
- listMcuCommands.clearAnimation()
- listMcuCommands.visibility = View.GONE
- listMcuCommands.startAnimation(leaveToButtomAnimation)
- }
- else -> doNothingButton.isChecked = false
- }
-
- listKeyEvents.requestFocus()
- mode = ActionMode.InvokeKeyEvent
- }
- }
- startAppButton.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean ->
- if (isChecked) {
- listApps.visibility = View.VISIBLE
- listApps.requestFocus()
- when (mode) {
- ActionMode.InvokeKeyEvent -> {
- invokeKeyButton.isChecked = false
- listKeyEvents.clearAnimation()
- listKeyEvents.startAnimation(leaveToTopAnimation)
- listKeyEvents.visibility = View.GONE
- listApps.startAnimation(enterFromButtomAnimation)
- }
- ActionMode.SendMcuCommand -> {
- mcuCommandsButton.isChecked = false
- listMcuCommands.clearAnimation()
- listMcuCommands.startAnimation(leaveToButtomAnimation)
- listMcuCommands.visibility = View.GONE
- listApps.startAnimation(enterFromTopAnimation)
- }
- else -> {
- doNothingButton.isChecked = false
- listApps.startAnimation(enterFromTopAnimation)
- }
- }
-
- listApps.requestFocus()
- mode = ActionMode.StartApp
- }
- }
- mcuCommandsButton.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean ->
- if (isChecked) {
- listMcuCommands.visibility = View.VISIBLE
- listMcuCommands.requestFocus()
- when (mode) {
- ActionMode.InvokeKeyEvent -> {
- invokeKeyButton.isChecked = false
- listKeyEvents.clearAnimation()
- listKeyEvents.startAnimation(leaveToTopAnimation)
- listKeyEvents.visibility = View.GONE
- listMcuCommands.startAnimation(enterFromButtomAnimation)
- }
- ActionMode.StartApp -> {
- startAppButton.isChecked = false
- listApps.clearAnimation()
- listApps.startAnimation(leaveToTopAnimation)
- listApps.visibility = View.GONE
- listMcuCommands.startAnimation(enterFromButtomAnimation)
- }
- else -> {
- doNothingButton.isChecked = false
- listMcuCommands.startAnimation(enterFromTopAnimation)
- }
- }
-
- listMcuCommands.requestFocus()
- mode = ActionMode.SendMcuCommand
- }
- }
- }
-
- private fun preselectEvent() {
- when(mViewModel.config?.eventMode){
- EventMode.KeyEvent -> invokeKeyButton.isChecked = true
- EventMode.StartApp -> startAppButton.isChecked = true
- EventMode.McuCommand -> mcuCommandsButton.isChecked = true
- else -> doNothingButton.isChecked = true
- }
- }
-
- companion object {
- fun newInstance(type: EventManagerTypes, actionEvent: EventManager.OnActionResult): EventManagerSelectAction? {
- return EventManagerSelectAction(type, actionEvent)
- }
- }
-
- enum class ActionMode {DoNothing, InvokeKeyEvent, StartApp, SendMcuCommand}
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/gui/MainActivity.kt b/app/src/main/java/com/snaggly/ksw_toolkit/gui/MainActivity.kt
deleted file mode 100644
index 0507482..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/gui/MainActivity.kt
+++ /dev/null
@@ -1,134 +0,0 @@
-package com.snaggly.ksw_toolkit.gui
-
-import android.content.Intent
-import android.net.Uri
-import android.os.Bundle
-import android.provider.Settings
-import android.widget.Button
-import androidx.appcompat.app.AppCompatActivity
-import androidx.fragment.app.Fragment
-import androidx.fragment.app.FragmentManager
-import androidx.lifecycle.ViewModelProvider
-import com.snaggly.ksw_toolkit.R
-import com.snaggly.ksw_toolkit.gui.viewmodels.MainActivityViewModel
-
-class MainActivity : AppCompatActivity() {
- private lateinit var mainViewModel: MainActivityViewModel
- private lateinit var soundRestorerFragment: Fragment
- private var eventManagerFragment: Fragment? = null
- private var systemTweaksFragment: Fragment? = null
- private var adbShellFragment: Fragment? = null
- private var mcuListenerFragment: Fragment? = null
- private var configFragment: Fragment? = null
- private lateinit var mFragManager: FragmentManager
- private lateinit var toolKitPane: Button
- private lateinit var eventManagerPane: Button
- private lateinit var systemTweaksPane: Button
- private lateinit var adbShellPane: Button
- private lateinit var mcuListenerPane: Button
- private lateinit var configImportExportPane: Button
- private lateinit var previousCallingButton: Button
- private var tabFragmentId = 0
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- mainViewModel = ViewModelProvider(this).get(MainActivityViewModel::class.java)
- if (!checkPermissions())
- finish()
- else {
- startService()
- startApp()
- }
- }
-
- override fun onStart() {
- super.onStart()
- }
-
- override fun onResume() {
- super.onResume()
- mainViewModel.bindToMcuService()
- }
-
- override fun onStop() {
- super.onStop()
- //mainViewModel.unbindFromMcuService()
- }
-
- override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
- checkPermissions()
- }
-
- private fun checkPermissions(): Boolean {
- if (!Settings.canDrawOverlays(this)) {
- startActivityForResult(Intent("android.settings.action.MANAGE_OVERLAY_PERMISSION", Uri.parse("package:$packageName")), 5469)
- return false
- }
- return true
- }
-
- private fun startService() {
- mainViewModel.startService()
- }
-
- private fun startApp() {
- setContentView(R.layout.activity_main)
- mFragManager = supportFragmentManager
- initViewElements()
- setBtnClicks()
- initPaneFragment()
- }
-
- private fun initViewElements() {
- toolKitPane = findViewById(R.id.soundRestorerPaneBtn)
- eventManagerPane = findViewById(R.id.eventManagerPaneBtn)
- systemTweaksPane = findViewById(R.id.systemTweaksPaneBtn)
- adbShellPane = findViewById(R.id.adbShellPaneBtn)
- mcuListenerPane = findViewById(R.id.mcuListenerPaneBtn)
- configImportExportPane = findViewById(R.id.configPaneBtn)
- tabFragmentId = R.id.tabFragment
- }
-
- private fun setBtnClicks() {
- toolKitPane.setOnClickListener { switchFragment(mFragManager, toolKitPane, soundRestorerFragment) }
- eventManagerPane.setOnClickListener {
- if (eventManagerFragment == null)
- eventManagerFragment = EventManager()
- switchFragment(mFragManager, eventManagerPane, eventManagerFragment!!)
- }
- systemTweaksPane.setOnClickListener {
- if (systemTweaksFragment == null)
- systemTweaksFragment = SystemTwaks()
- switchFragment(mFragManager, systemTweaksPane, systemTweaksFragment!!)
- }
- adbShellPane.setOnClickListener {
- if (adbShellFragment == null)
- adbShellFragment = AdbShell()
- switchFragment(mFragManager, adbShellPane, adbShellFragment!!)
- }
- mcuListenerPane.setOnClickListener {
- if (mcuListenerFragment == null)
- mcuListenerFragment = McuListener()
- switchFragment(mFragManager, mcuListenerPane, mcuListenerFragment!!)
- }
- configImportExportPane.setOnClickListener {
- if (configFragment == null)
- configFragment = ConfigImportExport()
- switchFragment(mFragManager, configImportExportPane, configFragment!!)
- }
- }
-
- private fun initPaneFragment() {
- soundRestorerFragment = ToolKit()
- previousCallingButton = toolKitPane
- switchFragment(mFragManager, toolKitPane, soundRestorerFragment)
- toolKitPane.requestFocus()
- }
-
- private fun switchFragment(manager: FragmentManager, callingButton: Button, fragment: Fragment) {
- previousCallingButton.setBackgroundResource(R.drawable.btn_selector)
- callingButton.setBackgroundResource(R.drawable.ksw_id7_itme_select_bg_focused)
- previousCallingButton = callingButton
- manager.beginTransaction().replace(tabFragmentId, fragment).commit()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/gui/McuListener.kt b/app/src/main/java/com/snaggly/ksw_toolkit/gui/McuListener.kt
deleted file mode 100644
index 5de1ba0..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/gui/McuListener.kt
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.snaggly.ksw_toolkit.gui
-
-import androidx.lifecycle.ViewModelProvider
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import androidx.fragment.app.Fragment
-import androidx.recyclerview.widget.LinearLayoutManager
-import androidx.recyclerview.widget.RecyclerView
-import com.snaggly.ksw_toolkit.R
-import com.snaggly.ksw_toolkit.gui.viewmodels.McuListenerViewModel
-
-class McuListener : Fragment() {
-
- companion object {
- fun newInstance() = McuListener()
- }
-
- private lateinit var viewModel: McuListenerViewModel
- private lateinit var mcuEventRV: RecyclerView
-
- override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?): View? {
- return inflater.inflate(R.layout.mcu_listener_fragment, container, false)
- }
-
- override fun onActivityCreated(savedInstanceState: Bundle?) {
- super.onActivityCreated(savedInstanceState)
- viewModel = ViewModelProvider(this).get(McuListenerViewModel::class.java)
- initElements()
- }
-
- override fun onStart() {
- super.onStart()
- viewModel.parentActivity = requireActivity()
- viewModel.coreService?.mcuReaderHandler?.registerMcuEventListener(viewModel.mcuObserver)
- }
-
- override fun onStop() {
- super.onStop()
- viewModel.coreService?.mcuReaderHandler?.unregisterMcuEventListener(viewModel.mcuObserver)
- }
-
- private fun initElements() {
- mcuEventRV = requireView().findViewById(R.id.McuEventsRV);
- mcuEventRV.layoutManager = LinearLayoutManager(context)
- mcuEventRV.adapter = viewModel.getMcuEventAdapter()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/gui/SystemTwaks.kt b/app/src/main/java/com/snaggly/ksw_toolkit/gui/SystemTwaks.kt
deleted file mode 100644
index 5e34d84..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/gui/SystemTwaks.kt
+++ /dev/null
@@ -1,251 +0,0 @@
-package com.snaggly.ksw_toolkit.gui
-
-import android.app.AlertDialog
-import android.graphics.Color
-import androidx.lifecycle.ViewModelProvider
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.view.WindowManager
-import android.widget.Button
-import androidx.appcompat.widget.SwitchCompat
-import androidx.fragment.app.Fragment
-import com.google.android.material.textfield.TextInputEditText
-import com.snaggly.ksw_toolkit.R
-import com.snaggly.ksw_toolkit.gui.viewmodels.SystemTwaksViewModel
-
-class SystemTwaks : Fragment() {
-
- companion object {
- fun newInstance() = SystemTwaks()
- }
-
- private lateinit var viewModel: SystemTwaksViewModel
- private lateinit var startAtBoot: SwitchCompat
- private lateinit var stopKswServiceSwitch: SwitchCompat
- private lateinit var hideTopBarSwitch: SwitchCompat
- private lateinit var shrinkTopBarSwitch: SwitchCompat
- private lateinit var autoVolumeSwitch: SwitchCompat
- private lateinit var maxVolumeOnBootSwitch: SwitchCompat
- private lateinit var changeDPIButton: Button
- private lateinit var giveTaskerLogcatPermBtn: Button
- private lateinit var dpiInputField: TextInputEditText
- private lateinit var logCarDataToggle: SwitchCompat
- private lateinit var logMcuEventsToggle: SwitchCompat
- private lateinit var interceptMcuCommandToggle: SwitchCompat
-
- override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?): View? {
- return inflater.inflate(R.layout.system_twaks_fragment, container, false)
- }
-
- override fun onStart() {
- super.onStart()
- initElements()
- initButtonClickEvents()
- startAtBoot.requestFocus()
- }
-
- override fun onResume() {
- super.onResume()
- }
-
- override fun onActivityCreated(savedInstanceState: Bundle?) {
- super.onActivityCreated(savedInstanceState)
- viewModel = ViewModelProvider(this).get(SystemTwaksViewModel::class.java)
- }
-
- private fun initElements() {
- startAtBoot = requireView().findViewById(R.id.startAppAtBootTgl)
- stopKswServiceSwitch = requireView().findViewById(R.id.startStopKSWServiceSwitch)
- autoVolumeSwitch = requireView().findViewById(R.id.autoVolumeToggle)
- maxVolumeOnBootSwitch = requireView().findViewById(R.id.maxVolumeAtBootToggle)
- hideTopBarSwitch = requireView().findViewById(R.id.hideTopBarToggle)
- shrinkTopBarSwitch = requireView().findViewById(R.id.shrinkTopBarToggle)
- changeDPIButton = requireView().findViewById(R.id.changeDpiBtn)
- giveTaskerLogcatPermBtn = requireView().findViewById(R.id.giveTaskerLogcat)
- dpiInputField = requireView().findViewById(R.id.dpiTxtInput)
- logCarDataToggle = requireView().findViewById(R.id.logCarDataToggle)
- logMcuEventsToggle = requireView().findViewById(R.id.logMcuEventsToggle)
- interceptMcuCommandToggle = requireView().findViewById(R.id.interceptMcuCommandsToggle)
-
- startAtBoot.isChecked = viewModel.getConfig(requireContext()).startAtBoot.data
- stopKswServiceSwitch.isChecked = viewModel.getConfig(requireContext()).kswService.data
- autoVolumeSwitch.isChecked = viewModel.getConfig(requireContext()).autoVolume.data
- maxVolumeOnBootSwitch.isChecked = viewModel.getConfig(requireContext()).maxVolume.data
- hideTopBarSwitch.isChecked = viewModel.getConfig(requireContext()).hideTopBar.data
- shrinkTopBarSwitch.isChecked = viewModel.getConfig(requireContext()).shrinkTopBar.data
- val actualDpi = requireView().resources.displayMetrics.densityDpi
- viewModel.getConfig(requireContext()).dpi.data = actualDpi
- dpiInputField.setText(actualDpi.toString())
- logCarDataToggle.isChecked = viewModel.getConfig(requireContext()).carDataLogging.data
- logMcuEventsToggle.isChecked = viewModel.getConfig(requireContext()).logMcuEvent.data
- interceptMcuCommandToggle.isChecked = viewModel.getConfig(requireContext()).interceptMcuCommand.data
- if (!viewModel.getConfig(requireContext()).kswService.data) {
- logCarDataToggle.isEnabled = true
- logMcuEventsToggle.isEnabled = true
- interceptMcuCommandToggle.isEnabled = true
- }
- }
-
- private fun initButtonClickEvents() {
- startAtBoot.setOnCheckedChangeListener { _, isChecked ->
- viewModel.getConfig(requireContext()).startAtBoot.data = isChecked
- }
-
- autoVolumeSwitch.setOnCheckedChangeListener { _, isChecked ->
- viewModel.getConfig(requireContext()).autoVolume.data = isChecked
- try {
- viewModel.restartMcuReader()
- } catch (exception: Exception) {
- val alertExc = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit-SystemTweaks")
- .setMessage("Could not restart McuReader!\n\n${exception.localizedMessage}").create()
- alertExc.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alertExc.show()
- }
- }
-
- maxVolumeOnBootSwitch.setOnCheckedChangeListener { _, isChecked ->
- viewModel.getConfig(requireContext()).maxVolume.data = isChecked
- }
-
- stopKswServiceSwitch.setOnCheckedChangeListener { _, isChecked ->
- viewModel.getConfig(requireContext()).kswService.data = isChecked
-
- if (!isChecked) {
- val alert = AlertDialog.Builder(requireContext(), R.style.alertDialogNight).setTitle("KSW-ToolKit-SystemTweaks")
- .setMessage("You are about to shut down the built in KSW McuService. This could lead to unaccounted issues. Are you sure you still want to proceed?").create()
- alert.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alert.setButton(AlertDialog.BUTTON_POSITIVE, "Yes!") { _, _ ->
- logCarDataToggle.isEnabled = true
- logMcuEventsToggle.isEnabled = true
- interceptMcuCommandToggle.isEnabled = true
- try {
- viewModel.restartMcuReader()
- } catch (exception: Exception) {
- val alertExc = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit-SystemTweaks")
- .setMessage("Could not restart McuReader!\n\n${exception.localizedMessage}").create()
- alertExc.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alertExc.show()
- }
- }
- alert.setButton(AlertDialog.BUTTON_NEGATIVE, "No") { _, _ ->
- stopKswServiceSwitch.isChecked = true
- }
- alert.show()
- } else {
- logCarDataToggle.isChecked = false
- logMcuEventsToggle.isChecked = false
- interceptMcuCommandToggle.isChecked = false
- logCarDataToggle.isEnabled = false
- logMcuEventsToggle.isEnabled = false
- interceptMcuCommandToggle.isEnabled = false
- try {
- viewModel.restartMcuReader()
- } catch (exception: Exception) {
- val alert = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit-SystemTweaks")
- .setMessage("Could not restart McuReader!\n\n${exception.localizedMessage}").create()
- alert.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alert.show()
- }
- }
-
- }
-
- hideTopBarSwitch.setOnCheckedChangeListener { _, isChecked ->
- try {
- if (isChecked) {
- shrinkTopBarSwitch.isChecked = false
- viewModel.hideTopBar()
- } else {
- viewModel.showTopBar()
- }
- viewModel.getConfig(requireContext()).hideTopBar.data = isChecked
- } catch (exception: Exception) {
- val alert = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit-SystemTweaks")
- .setMessage("Unable to mess with TopBar!\n\n${exception.localizedMessage}").create()
- alert.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alert.show()
- }
- }
-
- shrinkTopBarSwitch.setOnCheckedChangeListener { _, isChecked ->
- try {
- if (isChecked) {
- hideTopBarSwitch.isChecked = false
- viewModel.shrinkTopBar()
- } else {
- viewModel.restoreTopBar()
- }
- viewModel.getConfig(requireContext()).shrinkTopBar.data = isChecked
- } catch (exception: Exception) {
- val alert = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit-SystemTweaks")
- .setMessage("Unable to mess with TopBar!\n\n${exception.localizedMessage}").create()
- alert.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alert.show()
- }
- }
-
- changeDPIButton.setOnClickListener {
- try {
- val newDPI = Integer.parseInt(dpiInputField.text.toString())
- viewModel.getConfig(requireContext()).dpi.data = newDPI
- viewModel.changeDPI(newDPI)
- } catch (exception: Exception) {
- val alert = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit-SystemTweaks")
- .setMessage("Exception Saving DPI!\n\n${exception.localizedMessage}").create()
- alert.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alert.show()
- }
- }
-
- giveTaskerLogcatPermBtn.setOnClickListener {
- try {
- viewModel.coreService?.adbConnection!!.sendCommand("pm grant net.dinglisch.android.taskerm android.permission.READ_LOGS")
- } catch (exception: Exception) {
- val alert = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit-SystemTweaks")
- .setMessage("Unable to give Tasker Logcat Permission!\n\n${exception.localizedMessage}").create()
- alert.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alert.show()
- }
- }
-
- logCarDataToggle.setOnCheckedChangeListener { _, isChecked ->
- viewModel.getConfig(requireContext()).carDataLogging.data = isChecked
- try {
- viewModel.restartMcuReader()
- } catch (exception: Exception) {
- val alertExc = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit-SystemTweaks")
- .setMessage("Could not restart McuReader!\n\n${exception.localizedMessage}").create()
- alertExc.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alertExc.show()
- }
- }
-
- logMcuEventsToggle.setOnCheckedChangeListener { _, isChecked ->
- viewModel.getConfig(requireContext()).logMcuEvent.data = isChecked
- try {
- viewModel.restartMcuReader()
- } catch (exception: Exception) {
- val alertExc = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit-SystemTweaks")
- .setMessage("Could not restart McuReader!\n\n${exception.localizedMessage}").create()
- alertExc.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alertExc.show()
- }
- }
-
- interceptMcuCommandToggle.setOnCheckedChangeListener { _, isChecked ->
- viewModel.getConfig(requireContext()).interceptMcuCommand.data = isChecked
-
- try {
- viewModel.restartMcuReader()
- } catch (exception: Exception) {
- val alertExc = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit-SystemTweaks")
- .setMessage("Could not restart McuReader!\n\n${exception.localizedMessage}").create()
- alertExc.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alertExc.show()
- }
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/gui/ToolKit.kt b/app/src/main/java/com/snaggly/ksw_toolkit/gui/ToolKit.kt
deleted file mode 100644
index 2341a67..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/gui/ToolKit.kt
+++ /dev/null
@@ -1,169 +0,0 @@
-package com.snaggly.ksw_toolkit.gui
-
-import android.app.AlertDialog
-import android.os.Bundle
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.view.WindowManager
-import android.widget.Button
-import android.widget.LinearLayout
-import android.widget.SeekBar
-import androidx.fragment.app.Fragment
-import androidx.lifecycle.ViewModelProvider
-import com.snaggly.ksw_toolkit.R
-import com.snaggly.ksw_toolkit.gui.viewmodels.ToolKitViewModel
-
-class ToolKit : Fragment() {
-
- private lateinit var mViewModel: ToolKitViewModel
- private lateinit var carInfo: LinearLayout
- private lateinit var radio: LinearLayout
- private lateinit var frontCam: LinearLayout
- private lateinit var aux: LinearLayout
- private lateinit var dvr: LinearLayout
- private lateinit var dvd: LinearLayout
- private lateinit var dtv: LinearLayout
- private lateinit var brightnessBar: SeekBar
- private lateinit var screenOffBtn: Button
-
- override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
- savedInstanceState: Bundle?): View? {
- return inflater.inflate(R.layout.toolkit_fragment, container, false)
- }
-
- override fun onActivityCreated(savedInstanceState: Bundle?) {
- super.onActivityCreated(savedInstanceState)
- mViewModel = ViewModelProvider(this).get(ToolKitViewModel::class.java)
- initViews()
- initClickEvents()
- }
-
- private fun initViews() {
- carInfo = requireView().findViewById(R.id.carInfoBtn)
- radio = requireView().findViewById(R.id.radioBtn)
- frontCam = requireView().findViewById(R.id.frontCamBtn)
- aux = requireView().findViewById(R.id.auxBtn)
- dvr = requireView().findViewById(R.id.dvrBtn)
- dvd = requireView().findViewById(R.id.dvdBtn)
- dtv = requireView().findViewById(R.id.dtvBtn)
- brightnessBar = requireView().findViewById(R.id.brightnessSeekBar)
- brightnessBar.progress = mViewModel.getBrightness(requireContext())
- screenOffBtn = requireView().findViewById(R.id.screenOffBtn)
- carInfo.requestFocus()
- }
-
- private fun initClickEvents() {
- brightnessBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
- override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
- try {
- mViewModel.setBrightness(requireContext(), progress)
- } catch (exception: Exception) {
- val alertExc = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit")
- .setMessage("Unable to change System Brightness!\n\n${exception.localizedMessage}").create()
- alertExc.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alertExc.show()
- }
- }
-
- override fun onStartTrackingTouch(seekBar: SeekBar?) {
- }
-
- override fun onStopTrackingTouch(seekBar: SeekBar?) {
- }
-
- })
-
- carInfo.setOnClickListener {
- try {
- mViewModel.openOEMScreen()
- } catch (exception: Exception) {
- val alertExc = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit")
- .setMessage("Unable to open OEM Screen!\n\n${exception.localizedMessage}").create()
- alertExc.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alertExc.show()
- }
- }
-
- radio.setOnClickListener {
- try {
- mViewModel.openRadioScreen()
- } catch (exception: Exception) {
- val alertExc = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit")
- .setMessage("Unable to open Radio Screen!\n\n${exception.localizedMessage}").create()
- alertExc.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alertExc.show()
- }
- }
-
- frontCam.setOnClickListener {
- try {
- mViewModel.openFCamScreen()
- } catch (exception: Exception) {
- val alertExc = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit")
- .setMessage("Unable to open F_CAM Screen!\n\n${exception.localizedMessage}").create()
- alertExc.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alertExc.show()
- }
- }
-
- aux.setOnClickListener {
- try {
- mViewModel.openAuxScreen()
- } catch (exception: Exception) {
- val alertExc = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit")
- .setMessage("Unable to open AUX Screen!\n\n${exception.localizedMessage}").create()
- alertExc.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alertExc.show()
- }
- }
-
- dvr.setOnClickListener {
- try {
- mViewModel.openDvrScreen()
- } catch (exception: Exception) {
- val alertExc = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit")
- .setMessage("Unable to open DVR Screen!\n\n${exception.localizedMessage}").create()
- alertExc.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alertExc.show()
- }
- }
-
- dvd.setOnClickListener {
- try {
- mViewModel.openDvdScreen()
- } catch (exception: Exception) {
- val alertExc = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit")
- .setMessage("Unable to open DVD Screen!\n\n${exception.localizedMessage}").create()
- alertExc.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alertExc.show()
- }
- }
-
- dtv.setOnClickListener {
- try {
- mViewModel.openDtvScreen()
- } catch (exception: Exception) {
- val alertExc = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit")
- .setMessage("Unable to open DTV Screen!\n\n${exception.localizedMessage}").create()
- alertExc.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alertExc.show()
- }
- }
-
- screenOffBtn.setOnClickListener {
- try {
- mViewModel.closeScreen()
- } catch (exception: Exception) {
- val alertExc = AlertDialog.Builder(context, R.style.alertDialogNight).setTitle("KSW-ToolKit")
- .setMessage("Unable to close screen!\n\n${exception.localizedMessage}").create()
- alertExc.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
- alertExc.show()
- }
- }
- }
-
- companion object {
- fun newInstance() = ToolKit()
- }
-}
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/AdbShellViewModel.kt b/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/AdbShellViewModel.kt
deleted file mode 100644
index ba84879..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/AdbShellViewModel.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.snaggly.ksw_toolkit.gui.viewmodels
-
-import com.snaggly.ksw_toolkit.core.service.helper.CoreServiceClient
-
-class AdbShellViewModel : CoreServiceClient()
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/ConfigImportExportViewModel.kt b/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/ConfigImportExportViewModel.kt
deleted file mode 100644
index bf3ae8d..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/ConfigImportExportViewModel.kt
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.snaggly.ksw_toolkit.gui.viewmodels
-
-import android.content.Context
-import com.snaggly.ksw_toolkit.core.config.ConfigManager
-import com.snaggly.ksw_toolkit.core.service.helper.CoreServiceClient
-
-class ConfigImportExportViewModel : CoreServiceClient() {
- fun importConfig(context: Context) : String {
- val storagePath = "${context.getExternalFilesDir(null)?.absolutePath}/KSW-Config.json"
- storagePath.let { ConfigManager.importConfig(context.filesDir.absolutePath, it) }
- return storagePath
- }
-
- fun exportConfig(context: Context) : String {
- val storagePath = "${context.getExternalFilesDir(null)?.absolutePath}/KSW-Config.json"
- storagePath.let { ConfigManager.exportConfig(it) }
- return storagePath
- }
-
- fun restartSystem() {
- coreService?.adbConnection!!.sendCommand("reboot")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/EventManagerSelectActionViewModel.kt b/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/EventManagerSelectActionViewModel.kt
deleted file mode 100644
index 3560728..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/EventManagerSelectActionViewModel.kt
+++ /dev/null
@@ -1,121 +0,0 @@
-package com.snaggly.ksw_toolkit.gui.viewmodels
-
-import android.content.Context
-import androidx.lifecycle.ViewModel
-import androidx.recyclerview.widget.RecyclerView
-import com.snaggly.ksw_toolkit.core.config.ConfigManager
-import com.snaggly.ksw_toolkit.core.config.beans.EventManager
-import com.snaggly.ksw_toolkit.util.adapters.ListTypeAdapter
-import com.snaggly.ksw_toolkit.util.list.app.AppInfo
-import com.snaggly.ksw_toolkit.util.list.app.AppsLister
-import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
-import com.snaggly.ksw_toolkit.util.list.eventtype.EventMode
-import com.snaggly.ksw_toolkit.util.list.keyevent.KeyEvent
-import com.snaggly.ksw_toolkit.util.list.mcu.McuCommandsList
-
-class EventManagerSelectActionViewModel : ViewModel() {
- private var listKeyEventsAdapter : RecyclerView.Adapter? = null
- private var availableAppsAdapter : RecyclerView.Adapter? = null
- private var mcuCommandsListAdapter : RecyclerView.Adapter? = null
-
- private var keyEvents: ArrayList? = null
- private var appsList: ArrayList? = null
- private var mcuCommandsList: ArrayList? = null
- var config : EventManager? = null
-
- var eventCurType : EventManagerTypes = EventManagerTypes.Dummy
-
- lateinit var actionEvent: com.snaggly.ksw_toolkit.gui.EventManager.OnActionResult
-
- private fun initConfig(context: Context) {
- if (config == null)
- config = ConfigManager.getConfig(context.filesDir.absolutePath).eventManagers[eventCurType]
- }
-
- private fun findKeyCodeFromList(keyCode: Int) : Int{
- for (i in 0 until keyEvents?.size!!) {
- if (keyCode == keyEvents!![i].code)
- return i
- }
- return -1
- }
-
- private fun findAppFromList(name: String) : Int{
- for (i in 0 until appsList?.size!!) {
- if (name == appsList!![i].packageName)
- return i
- }
- return -1
- }
-
- private fun initKeyEventsAdapter(context: Context) {
- initConfig(context)
- keyEvents = KeyEvent.getKeyEventList(context)
- listKeyEventsAdapter = ListTypeAdapter(keyEvents!!, findKeyCodeFromList(config?.keyCode!!.data), onKeyCodeClickListener)
- }
-
- private fun initAvailableAppsAdapter(context: Context) {
- appsList = AppsLister(context).getAppsList()
- availableAppsAdapter = ListTypeAdapter(appsList!!, findAppFromList(config?.appName!!.data), onAppClickListener)
- }
-
- private fun initMcuCommandsListAdapter(context: Context) {
- mcuCommandsList = McuCommandsList.getMcuCommandsList(context)
- mcuCommandsListAdapter = ListTypeAdapter(mcuCommandsList!!, config?.mcuCommandMode!!.data, onMcuCommandClickListener)
- }
-
- fun getListKeyEventsAdapter(context: Context): RecyclerView.Adapter {
- if (listKeyEventsAdapter == null)
- initKeyEventsAdapter(context)
- return listKeyEventsAdapter!!
- }
-
- fun getAvailableAppsAdapter(context: Context) : RecyclerView.Adapter {
- if (availableAppsAdapter == null)
- initAvailableAppsAdapter(context)
- return availableAppsAdapter!!
- }
-
- fun getMcuCommandsAdapter(context: Context) : RecyclerView.Adapter {
- if (mcuCommandsListAdapter == null)
- initMcuCommandsListAdapter(context)
- return mcuCommandsListAdapter!!
- }
-
- fun resetEvent() {
- config?.eventMode = EventMode.NoAssignment
- config?.keyCode!!.data = -1
- config?.appName!!.data = ""
- config?.mcuCommandMode!!.data = -1
- }
-
- private val onKeyCodeClickListener = object : ListTypeAdapter.OnAppClickListener {
- override fun onAppClick(position: Int) {
- config?.eventMode = EventMode.KeyEvent
- config?.keyCode!!.data = keyEvents?.get(position)!!.code
- config?.appName!!.data = ""
- config?.mcuCommandMode!!.data = -1
- actionEvent.notifyView()
- }
- }
-
- private val onAppClickListener = object : ListTypeAdapter.OnAppClickListener {
- override fun onAppClick(position: Int) {
- config?.eventMode = EventMode.StartApp
- config?.keyCode!!.data = -1
- config?.appName!!.data = appsList?.get(position)!!.packageName
- config?.mcuCommandMode!!.data = -1
- actionEvent.notifyView()
- }
- }
-
- private val onMcuCommandClickListener = object : ListTypeAdapter.OnAppClickListener {
- override fun onAppClick(position: Int) {
- config?.eventMode = EventMode.McuCommand
- config?.keyCode!!.data = -1
- config?.appName!!.data = ""
- config?.mcuCommandMode!!.data = position
- actionEvent.notifyView()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/EventManagerViewModel.kt b/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/EventManagerViewModel.kt
deleted file mode 100644
index 13d62ba..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/EventManagerViewModel.kt
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.snaggly.ksw_toolkit.gui.viewmodels
-
-import android.content.Context
-import androidx.lifecycle.ViewModel
-import com.snaggly.ksw_toolkit.core.config.ConfigManager
-import com.snaggly.ksw_toolkit.core.config.beans.EventManager
-import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
-
-class EventManagerViewModel : ViewModel() {
- private var config : HashMap? = null
-
- fun getConfig(context: Context) : HashMap {
- if (config == null)
- config = ConfigManager.getConfig(context.filesDir.absolutePath).eventManagers
- return config!!
- }
-
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/MainActivityViewModel.kt b/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/MainActivityViewModel.kt
deleted file mode 100644
index bbafec1..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/MainActivityViewModel.kt
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.snaggly.ksw_toolkit.gui.viewmodels
-
-import android.app.Application
-import android.content.Context
-import android.content.Intent
-import androidx.lifecycle.AndroidViewModel
-import com.snaggly.ksw_toolkit.core.service.CoreService
-import com.snaggly.ksw_toolkit.core.service.helper.CoreServiceConnector
-
-class MainActivityViewModel(application: Application) : AndroidViewModel(application) {
- private var mcuServiceIntent: Intent? = null
- private var context: Context = getApplication().applicationContext
- private var connector = CoreServiceConnector(context)
-
- fun startService() {
- mcuServiceIntent = Intent(context, CoreService::class.java)
- context.startForegroundService(mcuServiceIntent)
- }
-
- fun stopService() {
- context.stopService(mcuServiceIntent)
- }
-
- fun bindToMcuService() {
- connector.connectToService()
- }
-
- fun unbindFromMcuService() {
- connector.disconnectFromService()
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/McuListenerViewModel.kt b/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/McuListenerViewModel.kt
deleted file mode 100644
index 0220471..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/McuListenerViewModel.kt
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.snaggly.ksw_toolkit.gui.viewmodels
-
-import android.app.Activity
-import androidx.recyclerview.widget.RecyclerView
-import com.snaggly.ksw_toolkit.core.service.helper.CoreServiceClient
-import com.snaggly.ksw_toolkit.core.service.mcu.McuEventObserver
-import com.snaggly.ksw_toolkit.util.adapters.McuEventRVAdapter
-import com.snaggly.ksw_toolkit.util.list.eventtype.EventManagerTypes
-
-class McuListenerViewModel : CoreServiceClient() {
-
- private var mcuEventRVAdapter: McuEventRVAdapter = McuEventRVAdapter()
-
- fun getMcuEventAdapter(): RecyclerView.Adapter {
- return mcuEventRVAdapter
- }
-
- private fun addEntryToAdapter(eventName: String, dataString: String) {
- mcuEventRVAdapter.addNewEntry(eventName, dataString)
- }
-
- fun dataBytesToString(data: ByteArray): String {
- var result = ""
- for (i in 0..data.size - 2) {
- result += data[i].toString(16) + "-"
- }
- result += data[data.size - 1].toString(16)
-
- return result
- }
-
- var parentActivity: Activity? = null
-
- val mcuObserver = object : McuEventObserver {
- override fun update(eventType: EventManagerTypes?, cmdType: Int, data: ByteArray) {
- if (data.size > 2)
- if (cmdType == 0xA1 && data[0] == 0x17.toByte() && data[2] == 0x0.toByte())
- return
- val eventName = eventType?.name ?: "Unknown Event"
- parentActivity?.runOnUiThread {
- addEntryToAdapter("$eventName - $cmdType", dataBytesToString(data))
- }
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/SystemTwaksViewModel.kt b/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/SystemTwaksViewModel.kt
deleted file mode 100644
index fdc6171..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/SystemTwaksViewModel.kt
+++ /dev/null
@@ -1,41 +0,0 @@
-package com.snaggly.ksw_toolkit.gui.viewmodels
-
-import android.content.Context
-import com.snaggly.ksw_toolkit.core.config.ConfigManager
-import com.snaggly.ksw_toolkit.core.config.beans.SystemTweaks
-import com.snaggly.ksw_toolkit.core.service.helper.CoreServiceClient
-
-class SystemTwaksViewModel : CoreServiceClient() {
-
- private var config: SystemTweaks? = null
-
- fun getConfig(context: Context) : SystemTweaks {
- if (config == null)
- config = ConfigManager.getConfig(context.filesDir.absolutePath).systemTweaks
- return config!!
- }
-
- fun restartMcuReader() {
- coreService?.mcuReaderHandler?.restartReader()
- }
-
- fun changeDPI(dpi: Int) {
- coreService?.adbConnection!!.sendCommand("wm density $dpi")
- }
-
- fun shrinkTopBar() {
- coreService?.adbConnection!!.sendCommand("wm overscan 0,-9,0,0\nwm density ${config?.dpi!!.data-2}")
- }
-
- fun restoreTopBar() {
- coreService?.adbConnection!!.sendCommand("wm overscan 0,0,0,0\nwm density ${config?.dpi!!.data}")
- }
-
- fun showTopBar() {
- coreService?.adbConnection!!.sendCommand("settings put global policy_control null*")
- }
-
- fun hideTopBar() {
- coreService?.adbConnection!!.sendCommand("settings put global policy_control immersive.full=*")
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/ToolKitViewModel.kt b/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/ToolKitViewModel.kt
deleted file mode 100644
index 23a064a..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/gui/viewmodels/ToolKitViewModel.kt
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.snaggly.ksw_toolkit.gui.viewmodels
-
-import android.content.Context
-import android.provider.Settings
-import com.snaggly.ksw_toolkit.core.service.helper.CoreServiceClient
-import projekt.auto.mcu.ksw.serial.collection.McuCommands
-import projekt.auto.mcu.ksw.serial.enums.SOUND_SRC_TYPE
-
-class ToolKitViewModel : CoreServiceClient() {
-
- fun getBrightness(context: Context) : Int {
- return (Settings.System.getInt(context.contentResolver, Settings.System.SCREEN_BRIGHTNESS, 255)* 100) / 255
- }
-
- fun setBrightness(context: Context, brightness: Int) {
- Settings.System.putInt(context.contentResolver, Settings.System.SCREEN_BRIGHTNESS, brightness*255/100)
- coreService?.mcuLogic?.mcuCommunicator!!.sendCommand(McuCommands.SetBrightnessLevel(brightness.toByte()))
- }
-
- fun openOEMScreen() {
- coreService?.mcuLogic?.mcuCommunicator!!.sendCommand(McuCommands.SWITCH_TO_OEM)
- }
-
- fun openRadioScreen() {
- coreService?.mcuLogic?.mcuCommunicator!!.sendCommand(McuCommands.SetMusicSource(SOUND_SRC_TYPE.SRC_RADIO))
- }
-
- fun openFCamScreen() {
- coreService?.mcuLogic?.mcuCommunicator!!.sendCommand(McuCommands.SetMusicSource(SOUND_SRC_TYPE.SRC_FRONTCAM))
- }
-
- fun openAuxScreen() {
- coreService?.mcuLogic?.mcuCommunicator!!.sendCommand(McuCommands.SetMusicSource(SOUND_SRC_TYPE.SRC_AUX))
- }
-
- fun openDvrScreen() {
- coreService?.mcuLogic?.mcuCommunicator!!.sendCommand(McuCommands.SetMusicSource(SOUND_SRC_TYPE.SRC_DVR))
- }
-
- fun openDvdScreen() {
- coreService?.mcuLogic?.mcuCommunicator!!.sendCommand(McuCommands.SetMusicSource(SOUND_SRC_TYPE.SRC_DVD))
- }
-
- fun openDtvScreen() {
- coreService?.mcuLogic?.mcuCommunicator!!.sendCommand(McuCommands.SetMusicSource(SOUND_SRC_TYPE.SRC_DTV))
- }
-
- fun closeScreen() {
- coreService?.mcuLogic?.mcuCommunicator!!.sendCommand(McuCommands.SYS_SCREEN_OFF)
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/util/adapters/ListTypeAdapter.kt b/app/src/main/java/com/snaggly/ksw_toolkit/util/adapters/ListTypeAdapter.kt
deleted file mode 100644
index c6dcf76..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/util/adapters/ListTypeAdapter.kt
+++ /dev/null
@@ -1,74 +0,0 @@
-package com.snaggly.ksw_toolkit.util.adapters
-
-import android.content.res.ColorStateList
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.ImageView
-import android.widget.RadioButton
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.snaggly.ksw_toolkit.R
-import com.snaggly.ksw_toolkit.util.list.ListType
-
-class ListTypeAdapter(private val appsList: ArrayList,
- private var selectedApp : Int,
- private val onAppClickListener: OnAppClickListener)
- : RecyclerView.Adapter() {
-
- private lateinit var purple200 : ColorStateList
- private lateinit var purple500 : ColorStateList
- private var previousSelection : AppsListViewHolder? = null
-
- interface OnAppClickListener { fun onAppClick(position: Int)}
-
- inner class AppsListViewHolder(itemView: View, private val onClickListener: OnAppClickListener)
- : RecyclerView.ViewHolder(itemView), View.OnClickListener, View.OnFocusChangeListener {
- val appIconView : ImageView = itemView.findViewById(R.id.apps_list_icon)
- val appNameView : TextView = itemView.findViewById(R.id.apps_list_text)
- val appRadioButtonView : RadioButton = itemView.findViewById(R.id.apps_list_radioBtn)
-
- init {
- itemView.setOnClickListener(this)
- itemView.onFocusChangeListener = this
- }
-
- override fun onClick(v: View?) {
- previousSelection?.appRadioButtonView?.isChecked = false
- appRadioButtonView.isChecked = true
- previousSelection = this
- selectedApp = adapterPosition
- onClickListener.onAppClick(adapterPosition)
- }
-
- override fun onFocusChange(v: View?, hasFocus: Boolean) {
- if (hasFocus)
- appRadioButtonView.buttonTintList = purple200
- else
- appRadioButtonView.buttonTintList = purple500
- }
- }
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AppsListViewHolder {
- purple200 = ColorStateList.valueOf(parent.context.getColor(R.color.purple_200))
- purple500 = ColorStateList.valueOf(parent.context.getColor(R.color.purple_500))
- return AppsListViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.apps_view_list, parent, false), onAppClickListener)
- }
-
- override fun onBindViewHolder(holder: AppsListViewHolder, position: Int) {
- val currentApp = appsList[position]
- holder.appIconView.setImageDrawable(currentApp.icon)
- holder.appNameView.text = currentApp.name
- if (position == selectedApp) {
- holder.appRadioButtonView.isChecked = true
- previousSelection = holder
- }
- else {
- holder.appRadioButtonView.isChecked = false
- }
- }
-
- override fun getItemCount(): Int {
- return appsList.size
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/util/adapters/McuEventRVAdapter.kt b/app/src/main/java/com/snaggly/ksw_toolkit/util/adapters/McuEventRVAdapter.kt
deleted file mode 100644
index c9cb1f8..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/util/adapters/McuEventRVAdapter.kt
+++ /dev/null
@@ -1,45 +0,0 @@
-package com.snaggly.ksw_toolkit.util.adapters
-
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.TextView
-import androidx.recyclerview.widget.RecyclerView
-import com.snaggly.ksw_toolkit.R
-
-class McuEventRVAdapter : RecyclerView.Adapter() {
- private var names = ArrayList(arrayListOf(""))
- private var datas = ArrayList(arrayListOf(""))
-
- inner class McuEventViewHolder (itemView: View) : RecyclerView.ViewHolder(itemView) {
- val eventName : TextView = itemView.findViewById(R.id.mcuEventName)
- val dataString : TextView = itemView.findViewById(R.id.mcuDataString)
- }
-
- override fun getItemViewType(position: Int): Int {
- return if (position > 0) 1
- else 0
- }
-
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): McuEventViewHolder {
- return when (viewType) {
- 1 -> McuEventViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.mcu_event, parent, false))
- else -> McuEventViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.dummy_list, parent, false))
- }
- }
-
- override fun onBindViewHolder(holder: McuEventViewHolder, position: Int) {
- holder.eventName.text = names[position]
- holder.dataString.text = datas[position]
- }
-
- override fun getItemCount(): Int {
- return names.size;
- }
-
- fun addNewEntry(name: String, dataString: String) {
- names.add(1, name)
- datas.add(1, dataString)
- notifyItemInserted(1)
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/util/adapters/McuSourceAdapter.kt b/app/src/main/java/com/snaggly/ksw_toolkit/util/adapters/McuSourceAdapter.kt
deleted file mode 100644
index a4bbe3d..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/util/adapters/McuSourceAdapter.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.snaggly.ksw_toolkit.util.adapters
-
-import android.content.Context
-import com.snaggly.ksw_toolkit.R
-
-class McuSourceAdapter(context: Context) {
- private val mcuSourcesList = context.resources.getStringArray(R.array.mcuSourcesList)
-
- fun getSourceString(sourceInt: Int) : String{
- return mcuSourcesList[sourceInt]
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/util/adb/AdbManager.kt b/app/src/main/java/com/snaggly/ksw_toolkit/util/adb/AdbManager.kt
index 166e6e9..df5583c 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/util/adb/AdbManager.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/util/adb/AdbManager.kt
@@ -13,18 +13,13 @@ import java.net.Socket
import java.security.NoSuchAlgorithmException
object AdbManager {
- private lateinit var socket : Socket
private var isConnected = false
- private lateinit var adbConnection: AdbConnection
- private lateinit var shellStream: AdbStream
- private var previousShellText = ""
-
- interface OnAdbShellDataReceived {
- fun onDataReceived(text: String)
- }
+ private var socket : Socket? = null
+ private var adbConnection: AdbConnection? = null
+ private var shellStream: AdbStream? = null
@Throws(AdbConnectionException::class)
- fun connect(context: Context, destination: String, callback: OnAdbShellDataReceived) {
+ private fun connect(context: Context) {
if (isConnected)
disconnect()
var outerException: Exception? = null
@@ -33,10 +28,10 @@ object AdbManager {
TrafficStats.setThreadStatsTag(Thread.currentThread().id.toInt())
val adbCrypto = setupCrypto(context.filesDir)
socket = Socket()
- socket.connect(InetSocketAddress("localhost", 5555), 5000)
+ socket!!.connect(InetSocketAddress("localhost", 5555), 5000)
adbConnection = AdbConnection.create(socket, adbCrypto)
- adbConnection.connect()
- shellStream = adbConnection.open(destination)
+ adbConnection!!.connect()
+ shellStream = adbConnection!!.open("shell:")
} catch (e: Exception) {
outerException = e
}
@@ -47,40 +42,43 @@ object AdbManager {
if (outerException != null) {
throw AdbConnectionException(outerException!!)
}
-
- Thread {
- while (!shellStream.isClosed) {
- try {
- Thread.sleep(100)
- var shellText = String(shellStream.read(), Charsets.US_ASCII)
- if (shellText != previousShellText) {
- previousShellText = shellText
- callback.onDataReceived(shellText)
- }
- }
- catch (e : Exception) {
- isConnected = false
- e.printStackTrace()
- }
- }
- }.start()
- isConnected = true
+ isConnected = shellStream != null
}
- fun disconnect() {
- if (isConnected) {
- shellStream.close()
- adbConnection.close()
- socket.close()
+ private fun disconnect() {
+ val disconnecter = Thread {
+ shellStream?.close()
+ adbConnection?.close()
+ socket?.close()
}
+ disconnecter.start()
+ disconnecter.join()
+
isConnected = false
}
- fun sendCommand(command: String) {
+ private fun writeCommand(command: String) {
+ val writer = Thread {
+ try {
+ shellStream?.write(" $command\n")
+ }
+ catch (e : Exception) {
+ isConnected = false
+ }
+ }
+ writer.start()
+ writer.join()
+ }
+
+ fun sendCommand(command: String, context: Context) {
if (isConnected) {
- Thread {
- shellStream.write(" $command\n")
- }.start()
+ writeCommand(command)
+ } else {
+ connect(context)
+ if (isConnected) {
+ writeCommand(command)
+ }
+ disconnect()
}
}
@@ -111,4 +109,5 @@ object AdbManager {
return outerException.stackTrace
}
}
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/util/animation/ResizeAnimation.kt b/app/src/main/java/com/snaggly/ksw_toolkit/util/animation/ResizeAnimation.kt
deleted file mode 100644
index 791ceef..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/util/animation/ResizeAnimation.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.snaggly.ksw_toolkit.util.animation
-
-import android.view.View
-import android.view.animation.Animation
-import android.view.animation.Transformation
-
-class ResizeAnimation(private val view: View?, private val startWidth: Int, endW: Int, startH: Int, endH: Int) : Animation() {
- private val deltaWidth : Int = endW - startWidth // distance between start and end height
- private val startHeight: Int = startH
- private val deltaHeight: Int = endH - startH
- private val originalWidth: Int = view!!.width
- private val originalHeight: Int = view!!.height
- private var fillEnabled = false
- override fun setFillEnabled(enabled: Boolean) {
- fillEnabled = enabled
- super.setFillEnabled(enabled)
- }
-
- override fun applyTransformation(interpolatedTime: Float, t: Transformation?) {
- if (interpolatedTime.toDouble() == 1.0 && !fillEnabled) {
- view!!.layoutParams.height = originalHeight
- view.layoutParams.width = originalWidth
- } else {
- if (deltaHeight != 0) view!!.layoutParams.height = (startHeight + deltaHeight * interpolatedTime).toInt()
- if (deltaWidth != 0) view!!.layoutParams.width = (startWidth + deltaWidth * interpolatedTime).toInt()
- }
- view!!.requestLayout()
- }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/util/commander/McuCommander.kt b/app/src/main/java/com/snaggly/ksw_toolkit/util/commander/McuCommander.kt
index ee3fac2..5d351f0 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/util/commander/McuCommander.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/util/commander/McuCommander.kt
@@ -15,21 +15,19 @@ object McuCommander {
}
McuCommandsEnum.BrightnessInc -> {
- var currentBrightness = (Settings.System.getInt(context.contentResolver, Settings.System.SCREEN_BRIGHTNESS, 255) * 100) / 255
- currentBrightness += 10
- if (currentBrightness > 100)
- currentBrightness = 100
- Settings.System.putInt(context.contentResolver, Settings.System.SCREEN_BRIGHTNESS, currentBrightness * 255 / 100)
- mcuCommunicator?.sendCommand(McuCommands.SetBrightnessLevel(currentBrightness.toByte()))
+ var currentBrightness = Settings.System.getInt(context.contentResolver, Settings.System.SCREEN_BRIGHTNESS, 0xFF)
+ currentBrightness = (currentBrightness * 1.5).toInt()
+ if (currentBrightness > 0xFF)
+ currentBrightness = 0xFF
+ Settings.System.putInt(context.contentResolver, Settings.System.SCREEN_BRIGHTNESS, currentBrightness)
}
McuCommandsEnum.BrightnessDec -> {
- var currentBrightness = (Settings.System.getInt(context.contentResolver, Settings.System.SCREEN_BRIGHTNESS, 255) * 100) / 255
- currentBrightness -= 10
- if (currentBrightness < 0)
- currentBrightness = 0
- Settings.System.putInt(context.contentResolver, Settings.System.SCREEN_BRIGHTNESS, currentBrightness * 255 / 100)
- mcuCommunicator?.sendCommand(McuCommands.SetBrightnessLevel(currentBrightness.toByte()))
+ var currentBrightness = Settings.System.getInt(context.contentResolver, Settings.System.SCREEN_BRIGHTNESS, 0xFF)
+ currentBrightness = (currentBrightness / 1.5).toInt()
+ if (currentBrightness < 10)
+ currentBrightness = 10
+ Settings.System.putInt(context.contentResolver, Settings.System.SCREEN_BRIGHTNESS, currentBrightness)
}
McuCommandsEnum.CarInfo -> mcuCommunicator?.sendCommand(McuCommands.SWITCH_TO_OEM)
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/util/list/ListType.kt b/app/src/main/java/com/snaggly/ksw_toolkit/util/list/ListType.kt
deleted file mode 100644
index fe9454b..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/util/list/ListType.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.snaggly.ksw_toolkit.util.list
-
-import android.graphics.drawable.Drawable
-
-open class ListType(val name: String, val icon: Drawable) {}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/util/list/app/AppInfo.kt b/app/src/main/java/com/snaggly/ksw_toolkit/util/list/app/AppInfo.kt
deleted file mode 100644
index 92ac550..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/util/list/app/AppInfo.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.snaggly.ksw_toolkit.util.list.app
-
-import android.graphics.drawable.Drawable
-import com.snaggly.ksw_toolkit.util.list.ListType
-
-class AppInfo(appName: String, val packageName: String, appIcon: Drawable) : ListType(appName, appIcon)
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/util/list/app/AppsLister.kt b/app/src/main/java/com/snaggly/ksw_toolkit/util/list/app/AppsLister.kt
deleted file mode 100644
index 86e7f2c..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/util/list/app/AppsLister.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.snaggly.ksw_toolkit.util.list.app
-
-import android.annotation.SuppressLint
-import android.content.Context
-
-@SuppressLint("QueryPermissionsNeeded")
-class AppsLister (context: Context) {
- private val appsList = ArrayList()
-
- init {
- val apps = context.packageManager.getInstalledPackages(0)
-
- for (packageInfo in apps){
- if (context.packageManager.getLaunchIntentForPackage(packageInfo.packageName) == null) {
- continue;
- }
- var thisAppInfo = AppInfo(
- packageInfo.applicationInfo.loadLabel(context.packageManager) as String,
- packageInfo.packageName,
- packageInfo.applicationInfo.loadIcon(context.packageManager)
- )
-
- appsList.add(thisAppInfo)
- }
- }
-
- fun getNumOfApps() : Int{
- return appsList.size
- }
-
- fun getAppsList() : ArrayList {
- return appsList
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/util/list/eventtype/EventManagerTypes.kt b/app/src/main/java/com/snaggly/ksw_toolkit/util/list/eventtype/EventManagerTypes.kt
index e7d773d..478f9a1 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/util/list/eventtype/EventManagerTypes.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/util/list/eventtype/EventManagerTypes.kt
@@ -28,8 +28,5 @@ enum class EventManagerTypes {
ScreenSwitch,
Dummy;
- companion object {
- private val types = EventManagerTypes.values().associateBy { it.name }
- fun findByName(value: String) = types[value]
- }
+ companion object
}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/util/list/eventtype/EventMode.kt b/app/src/main/java/com/snaggly/ksw_toolkit/util/list/eventtype/EventMode.kt
index 27d87ba..f3b22cc 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/util/list/eventtype/EventMode.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/util/list/eventtype/EventMode.kt
@@ -6,8 +6,5 @@ enum class EventMode(val value: Int) {
StartApp(2),
McuCommand(3);
- companion object {
- private val types = values().associateBy { it.value }
- fun findByValue(value: Int) = types[value]
- }
+ companion object
}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/util/list/keyevent/KeyCode.kt b/app/src/main/java/com/snaggly/ksw_toolkit/util/list/keyevent/KeyCode.kt
index 5f2c7df..ba4f725 100644
--- a/app/src/main/java/com/snaggly/ksw_toolkit/util/list/keyevent/KeyCode.kt
+++ b/app/src/main/java/com/snaggly/ksw_toolkit/util/list/keyevent/KeyCode.kt
@@ -1,31 +1,17 @@
package com.snaggly.ksw_toolkit.util.list.keyevent
enum class KeyCode(val keycode : Int) {
- ASSIST(219),
BACK(4),
- CALCULATOR( 210),
- CALENDAR( 208),
- CONTACTS( 207),
- DPAD_CENTER( 23),
DPAD_DOWN( 20),
DPAD_LEFT( 21),
DPAD_RIGHT(22),
DPAD_UP(19),
ENTER(66),
- ENVELOPE( 65),
- EXPLORER(64),
HOME(3),
MEDIA_NEXT(87),
MEDIA_PLAY_PAUSE(85),
MEDIA_PREVIOUS(88),
- MEDIA_STOP(86),
- MUSIC(209),
- MUTE(91),
- SETTINGS(176),
VOICE_ASSIST(231),
VOLUME_DOWN(25),
- VOLUME_MUTE(164),
VOLUME_UP(24),
- KEYCODE_1(8),
- KEYCODE_2(9);
}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/util/list/keyevent/KeyEvent.kt b/app/src/main/java/com/snaggly/ksw_toolkit/util/list/keyevent/KeyEvent.kt
deleted file mode 100644
index 9bf5cfb..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/util/list/keyevent/KeyEvent.kt
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.snaggly.ksw_toolkit.util.list.keyevent
-
-import android.content.Context
-import android.graphics.drawable.Drawable
-import androidx.core.content.ContextCompat
-import com.snaggly.ksw_toolkit.R
-import com.snaggly.ksw_toolkit.util.list.ListType
-
-class KeyEvent(name: String, icon: Drawable, val code: Int) : ListType(name, icon) {
-
- companion object {
- fun getKeyEventList(context: Context) : ArrayList {
- val result = ArrayList()
- result.add(KeyEvent(KeyCode.BACK.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_keyboard_backspace_36)!!, KeyCode.BACK.keycode))
- result.add(KeyEvent(KeyCode.CALCULATOR.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_calculate_36)!!, KeyCode.CALCULATOR.keycode))
- result.add(KeyEvent(KeyCode.CALENDAR.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_calendar_today_36)!!, KeyCode.CALENDAR.keycode))
- result.add(KeyEvent(KeyCode.CONTACTS.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_contacts_36)!!, KeyCode.CONTACTS.keycode))
- result.add(KeyEvent(KeyCode.DPAD_CENTER.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_center_focus_weak_36)!!, KeyCode.DPAD_CENTER.keycode))
- result.add(KeyEvent(KeyCode.DPAD_DOWN.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_keyboard_arrow_down_36)!!, KeyCode.DPAD_DOWN.keycode))
- result.add(KeyEvent(KeyCode.DPAD_LEFT.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_keyboard_arrow_left_36)!!, KeyCode.DPAD_LEFT.keycode))
- result.add(KeyEvent(KeyCode.DPAD_RIGHT.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_keyboard_arrow_right_36)!!, KeyCode.DPAD_RIGHT.keycode))
- result.add(KeyEvent(KeyCode.DPAD_UP.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_keyboard_arrow_up_36)!!, KeyCode.DPAD_UP.keycode))
- result.add(KeyEvent(KeyCode.ENTER.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_filter_center_focus_24)!!, KeyCode.ENTER.keycode))
- result.add(KeyEvent(KeyCode.ENVELOPE.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_email_36)!!, KeyCode.ENVELOPE.keycode))
- result.add(KeyEvent(KeyCode.EXPLORER.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_file_copy_36)!!, KeyCode.EXPLORER.keycode))
- result.add(KeyEvent(KeyCode.HOME.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_home_24)!!, KeyCode.HOME.keycode))
- result.add(KeyEvent(KeyCode.MEDIA_NEXT.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_skip_next_36)!!, KeyCode.MEDIA_NEXT.keycode))
- result.add(KeyEvent(KeyCode.MEDIA_PLAY_PAUSE.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_play_arrow_36)!!, KeyCode.MEDIA_PLAY_PAUSE.keycode))
- result.add(KeyEvent(KeyCode.MEDIA_PREVIOUS.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_skip_previous_36)!!, KeyCode.MEDIA_PREVIOUS.keycode))
- result.add(KeyEvent(KeyCode.MEDIA_STOP.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_stop_36)!!, KeyCode.MEDIA_STOP.keycode))
- result.add(KeyEvent(KeyCode.MUSIC.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_library_music_36)!!, KeyCode.MUSIC.keycode))
- result.add(KeyEvent(KeyCode.SETTINGS.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_settings_24)!!, KeyCode.SETTINGS.keycode))
- result.add(KeyEvent(KeyCode.VOICE_ASSIST.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_record_voice_over_36)!!, KeyCode.VOICE_ASSIST.keycode))
- result.add(KeyEvent(KeyCode.VOLUME_DOWN.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_volume_down_36)!!, KeyCode.VOLUME_DOWN.keycode))
- result.add(KeyEvent(KeyCode.VOLUME_MUTE.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_volume_off_36)!!, KeyCode.VOLUME_MUTE.keycode))
- result.add(KeyEvent(KeyCode.VOLUME_UP.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_volume_up_36)!!, KeyCode.VOLUME_UP.keycode))
- result.add(KeyEvent(KeyCode.KEYCODE_1.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_code_36)!!, KeyCode.KEYCODE_1.keycode))
- result.add(KeyEvent(KeyCode.KEYCODE_2.name, ContextCompat.getDrawable(context, R.drawable.ic_baseline_code_36)!!, KeyCode.KEYCODE_2.keycode))
-
- return result
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/snaggly/ksw_toolkit/util/list/mcu/McuCommandsList.kt b/app/src/main/java/com/snaggly/ksw_toolkit/util/list/mcu/McuCommandsList.kt
deleted file mode 100644
index 57647e0..0000000
--- a/app/src/main/java/com/snaggly/ksw_toolkit/util/list/mcu/McuCommandsList.kt
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.snaggly.ksw_toolkit.util.list.mcu
-
-import android.content.Context
-import android.graphics.drawable.Drawable
-import androidx.core.content.ContextCompat
-import com.snaggly.ksw_toolkit.R
-import com.snaggly.ksw_toolkit.util.list.ListType
-
-class McuCommandsList(name: String, icon: Drawable, command: McuCommandsEnum) : ListType(name, icon) {
- companion object {
- fun getMcuCommandsList(context: Context) : ArrayList {
- val result = ArrayList()
-
- result.add(McuCommandsList("Turn Screen Off", ContextCompat.getDrawable(context,R.drawable.ic_baseline_web_asset_off_64)!!, McuCommandsEnum.ScreenOff))
- result.add(McuCommandsList("Increase Brightness", ContextCompat.getDrawable(context,R.drawable.ic_baseline_brightness_high_64)!!, McuCommandsEnum.BrightnessInc))
- result.add(McuCommandsList("Decrease Brightness", ContextCompat.getDrawable(context,R.drawable.ic_baseline_brightness_low_64)!!, McuCommandsEnum.BrightnessDec))
- result.add(McuCommandsList("Switch to OEM", ContextCompat.getDrawable(context,R.drawable.nbt_src_icon_carinfo)!!, McuCommandsEnum.CarInfo))
- result.add(McuCommandsList("Open Radio", ContextCompat.getDrawable(context,R.drawable.ic_baseline_radio_64)!!, McuCommandsEnum.Radio))
- result.add(McuCommandsList("Open Front Cam", ContextCompat.getDrawable(context,R.drawable.ic_baseline_camera_alt_64)!!, McuCommandsEnum.F_CAM))
- result.add(McuCommandsList("Open AUX", ContextCompat.getDrawable(context,R.drawable.ic_baseline_cable_64)!!, McuCommandsEnum.AUX))
- result.add(McuCommandsList("Open DVR", ContextCompat.getDrawable(context,R.drawable.ic_baseline_videocam_64)!!, McuCommandsEnum.DVR))
- result.add(McuCommandsList("Open DVD", ContextCompat.getDrawable(context,R.drawable.ic_baseline_settings_input_component_64)!!, McuCommandsEnum.DVD))
- result.add(McuCommandsList("Open DTV", ContextCompat.getDrawable(context,R.drawable.ic_baseline_live_tv_64)!!, McuCommandsEnum.DTV))
-
- return result
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/wits/pms/statuscontrol/PowerManagerApp.java b/app/src/main/java/com/wits/pms/statuscontrol/PowerManagerApp.java
index decbb2d..ecee808 100644
--- a/app/src/main/java/com/wits/pms/statuscontrol/PowerManagerApp.java
+++ b/app/src/main/java/com/wits/pms/statuscontrol/PowerManagerApp.java
@@ -13,6 +13,7 @@
import com.wits.pms.IContentObserver;
import com.wits.pms.IPowerManagerAppService;
import java.util.HashMap;
+import java.util.Objects;
public class PowerManagerApp {
private static ICmdListener cmdListener;
@@ -26,7 +27,7 @@ public void onChange(boolean selfChange) {
PowerManagerApp.registerICmdListener(PowerManagerApp.cmdListener);
}
for (String key : PowerManagerApp.maps.keySet()) {
- PowerManagerApp.registerIContentObserver(key, (IContentObserver) PowerManagerApp.maps.get(key));
+ PowerManagerApp.registerIContentObserver(key, Objects.requireNonNull(PowerManagerApp.maps.get(key)));
}
}
});
@@ -42,7 +43,7 @@ public static void registerICmdListener(ICmdListener listener) {
if (getManager() != null) {
getManager().registerCmdListener(listener);
}
- } catch (RemoteException e) {
+ } catch (RemoteException ignored) {
}
}
@@ -53,7 +54,7 @@ public static void registerIContentObserver(String key, IContentObserver content
if (getManager() != null) {
getManager().registerObserver(key, contentObserver);
}
- } catch (RemoteException e) {
+ } catch (RemoteException ignored) {
}
}
@@ -67,7 +68,7 @@ public static void unRegisterIContentObserver(IContentObserver contentObserver)
if (getManager() != null) {
getManager().unregisterObserver(contentObserver);
}
- } catch (RemoteException e) {
+ } catch (RemoteException ignored) {
}
}
@@ -95,8 +96,8 @@ public static boolean sendCommand(String jsonMsg) {
public static void sendStatus(WitsStatus witsStatus) {
if (getManager() != null) {
try {
- getManager().sendStatus(new Gson().toJson((Object) witsStatus));
- } catch (RemoteException e) {
+ getManager().sendStatus(new Gson().toJson(witsStatus));
+ } catch (RemoteException ignored) {
}
}
}
diff --git a/app/src/main/res/anim/enter_from_buttom.xml b/app/src/main/res/anim/enter_from_buttom.xml
deleted file mode 100644
index 37dd622..0000000
--- a/app/src/main/res/anim/enter_from_buttom.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/anim/enter_from_top.xml b/app/src/main/res/anim/enter_from_top.xml
deleted file mode 100644
index b0403fe..0000000
--- a/app/src/main/res/anim/enter_from_top.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/anim/leave_to_buttom.xml b/app/src/main/res/anim/leave_to_buttom.xml
deleted file mode 100644
index f51fe2a..0000000
--- a/app/src/main/res/anim/leave_to_buttom.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/anim/leave_to_top.xml b/app/src/main/res/anim/leave_to_top.xml
deleted file mode 100644
index cc32dd2..0000000
--- a/app/src/main/res/anim/leave_to_top.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/anim/slide_enter_right_left.xml b/app/src/main/res/anim/slide_enter_right_left.xml
deleted file mode 100644
index 6082d6f..0000000
--- a/app/src/main/res/anim/slide_enter_right_left.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/anim/slide_exit_right_left.xml b/app/src/main/res/anim/slide_exit_right_left.xml
deleted file mode 100644
index 879595a..0000000
--- a/app/src/main/res/anim/slide_exit_right_left.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/color/radio_selector.xml b/app/src/main/res/color/radio_selector.xml
deleted file mode 100644
index 0431a7f..0000000
--- a/app/src/main/res/color/radio_selector.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/color/spinner_color.xml b/app/src/main/res/color/spinner_color.xml
deleted file mode 100644
index 06f08fb..0000000
--- a/app/src/main/res/color/spinner_color.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/color/spinner_dropdown_color.xml b/app/src/main/res/color/spinner_dropdown_color.xml
deleted file mode 100644
index e8453cd..0000000
--- a/app/src/main/res/color/spinner_dropdown_color.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/color/switch_selector.xml b/app/src/main/res/color/switch_selector.xml
deleted file mode 100644
index c996184..0000000
--- a/app/src/main/res/color/switch_selector.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable-anydpi/ic_stat_name.xml b/app/src/main/res/drawable-anydpi/ic_stat_name.xml
deleted file mode 100644
index 87a230c..0000000
--- a/app/src/main/res/drawable-anydpi/ic_stat_name.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
diff --git a/app/src/main/res/drawable-hdpi/ic_stat_name.png b/app/src/main/res/drawable-hdpi/ic_stat_name.png
deleted file mode 100644
index 4ae8387..0000000
Binary files a/app/src/main/res/drawable-hdpi/ic_stat_name.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/ic_stat_name.png b/app/src/main/res/drawable-mdpi/ic_stat_name.png
deleted file mode 100644
index 1740a6b..0000000
Binary files a/app/src/main/res/drawable-mdpi/ic_stat_name.png and /dev/null differ
diff --git a/app/src/main/res/drawable-v24/ic_aux.png b/app/src/main/res/drawable-v24/ic_aux.png
deleted file mode 100644
index 3494985..0000000
Binary files a/app/src/main/res/drawable-v24/ic_aux.png and /dev/null differ
diff --git a/app/src/main/res/drawable-v24/ic_dtv.png b/app/src/main/res/drawable-v24/ic_dtv.png
deleted file mode 100644
index 5cf7165..0000000
Binary files a/app/src/main/res/drawable-v24/ic_dtv.png and /dev/null differ
diff --git a/app/src/main/res/drawable-v24/ic_dvr.png b/app/src/main/res/drawable-v24/ic_dvr.png
deleted file mode 100644
index 5e7201c..0000000
Binary files a/app/src/main/res/drawable-v24/ic_dvr.png and /dev/null differ
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
deleted file mode 100644
index 80dc465..0000000
--- a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable-v24/icon_fcam.png b/app/src/main/res/drawable-v24/icon_fcam.png
deleted file mode 100644
index 50b44fa..0000000
Binary files a/app/src/main/res/drawable-v24/icon_fcam.png and /dev/null differ
diff --git a/app/src/main/res/drawable-v24/id7_sys_factory_bg.png b/app/src/main/res/drawable-v24/id7_sys_factory_bg.png
deleted file mode 100644
index 4f56bdf..0000000
Binary files a/app/src/main/res/drawable-v24/id7_sys_factory_bg.png and /dev/null differ
diff --git a/app/src/main/res/drawable-v24/nbt_src_icon_carinfo.png b/app/src/main/res/drawable-v24/nbt_src_icon_carinfo.png
deleted file mode 100644
index 7c43de9..0000000
Binary files a/app/src/main/res/drawable-v24/nbt_src_icon_carinfo.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_stat_name.png b/app/src/main/res/drawable-xhdpi/ic_stat_name.png
deleted file mode 100644
index 2c296e5..0000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_stat_name.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_stat_name.png b/app/src/main/res/drawable-xxhdpi/ic_stat_name.png
deleted file mode 100644
index 1a129b0..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_stat_name.png and /dev/null differ
diff --git a/app/src/main/res/drawable/border.xml b/app/src/main/res/drawable/border.xml
deleted file mode 100644
index 5e1de44..0000000
--- a/app/src/main/res/drawable/border.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/border_focused.xml b/app/src/main/res/drawable/border_focused.xml
deleted file mode 100644
index 8ea3abe..0000000
--- a/app/src/main/res/drawable/border_focused.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/border_pressed.xml b/app/src/main/res/drawable/border_pressed.xml
deleted file mode 100644
index be5bd97..0000000
--- a/app/src/main/res/drawable/border_pressed.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/border_selector.xml b/app/src/main/res/drawable/border_selector.xml
deleted file mode 100644
index 25cafff..0000000
--- a/app/src/main/res/drawable/border_selector.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/btn_selector.xml b/app/src/main/res/drawable/btn_selector.xml
deleted file mode 100644
index b8d2291..0000000
--- a/app/src/main/res/drawable/btn_selector.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_baseline_brightness_high_64.xml b/app/src/main/res/drawable/ic_baseline_brightness_high_64.xml
deleted file mode 100644
index 2954147..0000000
--- a/app/src/main/res/drawable/ic_baseline_brightness_high_64.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_brightness_low_64.xml b/app/src/main/res/drawable/ic_baseline_brightness_low_64.xml
deleted file mode 100644
index 68f5886..0000000
--- a/app/src/main/res/drawable/ic_baseline_brightness_low_64.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_cable_64.xml b/app/src/main/res/drawable/ic_baseline_cable_64.xml
deleted file mode 100644
index d96e9c3..0000000
--- a/app/src/main/res/drawable/ic_baseline_cable_64.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_calculate_36.xml b/app/src/main/res/drawable/ic_baseline_calculate_36.xml
deleted file mode 100644
index 7f9952e..0000000
--- a/app/src/main/res/drawable/ic_baseline_calculate_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_calendar_today_36.xml b/app/src/main/res/drawable/ic_baseline_calendar_today_36.xml
deleted file mode 100644
index 1af7a0e..0000000
--- a/app/src/main/res/drawable/ic_baseline_calendar_today_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_camera_alt_64.xml b/app/src/main/res/drawable/ic_baseline_camera_alt_64.xml
deleted file mode 100644
index 30bf2bf..0000000
--- a/app/src/main/res/drawable/ic_baseline_camera_alt_64.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_center_focus_weak_36.xml b/app/src/main/res/drawable/ic_baseline_center_focus_weak_36.xml
deleted file mode 100644
index fb5f1f0..0000000
--- a/app/src/main/res/drawable/ic_baseline_center_focus_weak_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_cloud_download_24.xml b/app/src/main/res/drawable/ic_baseline_cloud_download_24.xml
deleted file mode 100644
index 7697c99..0000000
--- a/app/src/main/res/drawable/ic_baseline_cloud_download_24.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_cloud_upload_24.xml b/app/src/main/res/drawable/ic_baseline_cloud_upload_24.xml
deleted file mode 100644
index 0640d07..0000000
--- a/app/src/main/res/drawable/ic_baseline_cloud_upload_24.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_code_36.xml b/app/src/main/res/drawable/ic_baseline_code_36.xml
deleted file mode 100644
index 8ea5697..0000000
--- a/app/src/main/res/drawable/ic_baseline_code_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_contacts_36.xml b/app/src/main/res/drawable/ic_baseline_contacts_36.xml
deleted file mode 100644
index d0c8a9c..0000000
--- a/app/src/main/res/drawable/ic_baseline_contacts_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_email_36.xml b/app/src/main/res/drawable/ic_baseline_email_36.xml
deleted file mode 100644
index 0b20138..0000000
--- a/app/src/main/res/drawable/ic_baseline_email_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_file_copy_36.xml b/app/src/main/res/drawable/ic_baseline_file_copy_36.xml
deleted file mode 100644
index 4f463b9..0000000
--- a/app/src/main/res/drawable/ic_baseline_file_copy_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_filter_center_focus_24.xml b/app/src/main/res/drawable/ic_baseline_filter_center_focus_24.xml
deleted file mode 100644
index fc3c98e..0000000
--- a/app/src/main/res/drawable/ic_baseline_filter_center_focus_24.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_home_24.xml b/app/src/main/res/drawable/ic_baseline_home_24.xml
deleted file mode 100644
index 56ed169..0000000
--- a/app/src/main/res/drawable/ic_baseline_home_24.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_keyboard_arrow_down_36.xml b/app/src/main/res/drawable/ic_baseline_keyboard_arrow_down_36.xml
deleted file mode 100644
index b6726b1..0000000
--- a/app/src/main/res/drawable/ic_baseline_keyboard_arrow_down_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_keyboard_arrow_left_36.xml b/app/src/main/res/drawable/ic_baseline_keyboard_arrow_left_36.xml
deleted file mode 100644
index e2cda64..0000000
--- a/app/src/main/res/drawable/ic_baseline_keyboard_arrow_left_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_keyboard_arrow_right_36.xml b/app/src/main/res/drawable/ic_baseline_keyboard_arrow_right_36.xml
deleted file mode 100644
index 29c56dc..0000000
--- a/app/src/main/res/drawable/ic_baseline_keyboard_arrow_right_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_keyboard_arrow_up_36.xml b/app/src/main/res/drawable/ic_baseline_keyboard_arrow_up_36.xml
deleted file mode 100644
index 1c54558..0000000
--- a/app/src/main/res/drawable/ic_baseline_keyboard_arrow_up_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_keyboard_backspace_36.xml b/app/src/main/res/drawable/ic_baseline_keyboard_backspace_36.xml
deleted file mode 100644
index 9516871..0000000
--- a/app/src/main/res/drawable/ic_baseline_keyboard_backspace_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_library_music_36.xml b/app/src/main/res/drawable/ic_baseline_library_music_36.xml
deleted file mode 100644
index 90ef5bc..0000000
--- a/app/src/main/res/drawable/ic_baseline_library_music_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_live_tv_64.xml b/app/src/main/res/drawable/ic_baseline_live_tv_64.xml
deleted file mode 100644
index e6a2819..0000000
--- a/app/src/main/res/drawable/ic_baseline_live_tv_64.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_play_arrow_36.xml b/app/src/main/res/drawable/ic_baseline_play_arrow_36.xml
deleted file mode 100644
index eb522cb..0000000
--- a/app/src/main/res/drawable/ic_baseline_play_arrow_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_radio_64.xml b/app/src/main/res/drawable/ic_baseline_radio_64.xml
deleted file mode 100644
index 794ccc5..0000000
--- a/app/src/main/res/drawable/ic_baseline_radio_64.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_radio_button_checked_24.xml b/app/src/main/res/drawable/ic_baseline_radio_button_checked_24.xml
deleted file mode 100644
index 972cac3..0000000
--- a/app/src/main/res/drawable/ic_baseline_radio_button_checked_24.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_radio_button_checked_highlighted_24.xml b/app/src/main/res/drawable/ic_baseline_radio_button_checked_highlighted_24.xml
deleted file mode 100644
index d328a0e..0000000
--- a/app/src/main/res/drawable/ic_baseline_radio_button_checked_highlighted_24.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_radio_button_unchecked_24.xml b/app/src/main/res/drawable/ic_baseline_radio_button_unchecked_24.xml
deleted file mode 100644
index a87a9d3..0000000
--- a/app/src/main/res/drawable/ic_baseline_radio_button_unchecked_24.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_radio_button_unchecked_highlighted_24.xml b/app/src/main/res/drawable/ic_baseline_radio_button_unchecked_highlighted_24.xml
deleted file mode 100644
index 471af35..0000000
--- a/app/src/main/res/drawable/ic_baseline_radio_button_unchecked_highlighted_24.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_record_voice_over_36.xml b/app/src/main/res/drawable/ic_baseline_record_voice_over_36.xml
deleted file mode 100644
index 4844be4..0000000
--- a/app/src/main/res/drawable/ic_baseline_record_voice_over_36.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_settings_24.xml b/app/src/main/res/drawable/ic_baseline_settings_24.xml
deleted file mode 100644
index eaed177..0000000
--- a/app/src/main/res/drawable/ic_baseline_settings_24.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_settings_input_component_64.xml b/app/src/main/res/drawable/ic_baseline_settings_input_component_64.xml
deleted file mode 100644
index 5337ebb..0000000
--- a/app/src/main/res/drawable/ic_baseline_settings_input_component_64.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_skip_next_36.xml b/app/src/main/res/drawable/ic_baseline_skip_next_36.xml
deleted file mode 100644
index b435fc3..0000000
--- a/app/src/main/res/drawable/ic_baseline_skip_next_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_skip_previous_36.xml b/app/src/main/res/drawable/ic_baseline_skip_previous_36.xml
deleted file mode 100644
index b7f80bf..0000000
--- a/app/src/main/res/drawable/ic_baseline_skip_previous_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_stop_36.xml b/app/src/main/res/drawable/ic_baseline_stop_36.xml
deleted file mode 100644
index cd5f67f..0000000
--- a/app/src/main/res/drawable/ic_baseline_stop_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_videocam_64.xml b/app/src/main/res/drawable/ic_baseline_videocam_64.xml
deleted file mode 100644
index 0cb20e3..0000000
--- a/app/src/main/res/drawable/ic_baseline_videocam_64.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_volume_down_36.xml b/app/src/main/res/drawable/ic_baseline_volume_down_36.xml
deleted file mode 100644
index ea13f51..0000000
--- a/app/src/main/res/drawable/ic_baseline_volume_down_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_volume_mute_36.xml b/app/src/main/res/drawable/ic_baseline_volume_mute_36.xml
deleted file mode 100644
index 86eac51..0000000
--- a/app/src/main/res/drawable/ic_baseline_volume_mute_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_volume_off_36.xml b/app/src/main/res/drawable/ic_baseline_volume_off_36.xml
deleted file mode 100644
index a55a0d6..0000000
--- a/app/src/main/res/drawable/ic_baseline_volume_off_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_volume_up_36.xml b/app/src/main/res/drawable/ic_baseline_volume_up_36.xml
deleted file mode 100644
index f7f6824..0000000
--- a/app/src/main/res/drawable/ic_baseline_volume_up_36.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_baseline_web_asset_off_64.xml b/app/src/main/res/drawable/ic_baseline_web_asset_off_64.xml
deleted file mode 100644
index d1ce234..0000000
--- a/app/src/main/res/drawable/ic_baseline_web_asset_off_64.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
deleted file mode 100644
index 07d5da9..0000000
--- a/app/src/main/res/drawable/ic_launcher_background.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/drawable/ksw_id7_btn_pressed.png b/app/src/main/res/drawable/ksw_id7_btn_pressed.png
deleted file mode 100644
index 4385724..0000000
Binary files a/app/src/main/res/drawable/ksw_id7_btn_pressed.png and /dev/null differ
diff --git a/app/src/main/res/drawable/ksw_id7_itme_select_bg_focused.png b/app/src/main/res/drawable/ksw_id7_itme_select_bg_focused.png
deleted file mode 100644
index 1d5ed1d..0000000
Binary files a/app/src/main/res/drawable/ksw_id7_itme_select_bg_focused.png and /dev/null differ
diff --git a/app/src/main/res/drawable/ksw_id7_itme_select_bg_normal.png b/app/src/main/res/drawable/ksw_id7_itme_select_bg_normal.png
deleted file mode 100644
index 9ed8355..0000000
Binary files a/app/src/main/res/drawable/ksw_id7_itme_select_bg_normal.png and /dev/null differ
diff --git a/app/src/main/res/drawable/ksw_id7_itme_select_bg_pressed.png b/app/src/main/res/drawable/ksw_id7_itme_select_bg_pressed.png
deleted file mode 100644
index 9ed8355..0000000
Binary files a/app/src/main/res/drawable/ksw_id7_itme_select_bg_pressed.png and /dev/null differ
diff --git a/app/src/main/res/drawable/radio_selector.xml b/app/src/main/res/drawable/radio_selector.xml
deleted file mode 100644
index d39a109..0000000
--- a/app/src/main/res/drawable/radio_selector.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
deleted file mode 100644
index 021efac..0000000
--- a/app/src/main/res/layout/activity_main.xml
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/adb_shell_fragment.xml b/app/src/main/res/layout/adb_shell_fragment.xml
deleted file mode 100644
index 2293031..0000000
--- a/app/src/main/res/layout/adb_shell_fragment.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/apps_view_list.xml b/app/src/main/res/layout/apps_view_list.xml
deleted file mode 100644
index c42f6b8..0000000
--- a/app/src/main/res/layout/apps_view_list.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/config_fragment.xml b/app/src/main/res/layout/config_fragment.xml
deleted file mode 100644
index 2f84e8c..0000000
--- a/app/src/main/res/layout/config_fragment.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/dummy_list.xml b/app/src/main/res/layout/dummy_list.xml
deleted file mode 100644
index e909124..0000000
--- a/app/src/main/res/layout/dummy_list.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/event_manager_fragment.xml b/app/src/main/res/layout/event_manager_fragment.xml
deleted file mode 100644
index 3e1752e..0000000
--- a/app/src/main/res/layout/event_manager_fragment.xml
+++ /dev/null
@@ -1,318 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/event_manager_select_action_fragment.xml b/app/src/main/res/layout/event_manager_select_action_fragment.xml
deleted file mode 100644
index 678755b..0000000
--- a/app/src/main/res/layout/event_manager_select_action_fragment.xml
+++ /dev/null
@@ -1,87 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/mcu_event.xml b/app/src/main/res/layout/mcu_event.xml
deleted file mode 100644
index acc4e1d..0000000
--- a/app/src/main/res/layout/mcu_event.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/mcu_listener_fragment.xml b/app/src/main/res/layout/mcu_listener_fragment.xml
deleted file mode 100644
index 020bc0d..0000000
--- a/app/src/main/res/layout/mcu_listener_fragment.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/spinner_dropdown_layout.xml b/app/src/main/res/layout/spinner_dropdown_layout.xml
deleted file mode 100644
index df3fef7..0000000
--- a/app/src/main/res/layout/spinner_dropdown_layout.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/spinner_layout.xml b/app/src/main/res/layout/spinner_layout.xml
deleted file mode 100644
index 54b1b7f..0000000
--- a/app/src/main/res/layout/spinner_layout.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/system_twaks_fragment.xml b/app/src/main/res/layout/system_twaks_fragment.xml
deleted file mode 100644
index 799b2ab..0000000
--- a/app/src/main/res/layout/system_twaks_fragment.xml
+++ /dev/null
@@ -1,160 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/layout/toolkit_fragment.xml b/app/src/main/res/layout/toolkit_fragment.xml
deleted file mode 100644
index 8c5aa53..0000000
--- a/app/src/main/res/layout/toolkit_fragment.xml
+++ /dev/null
@@ -1,240 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi b/app/src/main/res/mipmap-anydpi
new file mode 100644
index 0000000..e69de29
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
deleted file mode 100644
index bc1373a..0000000
--- a/app/src/main/res/values-night/themes.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
deleted file mode 100644
index 6cf9ed4..0000000
--- a/app/src/main/res/values/arrays.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
- - Reply
- - Reply to all
-
-
-
- - reply
- - reply_all
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
deleted file mode 100644
index d29adb9..0000000
--- a/app/src/main/res/values/colors.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- #FFBB86FC
- #FF6200EE
- #FF3700B3
- #FF03DAC5
- #FF018786
- #FF000000
- #FFFFFFFF
- #00000000
-
\ No newline at end of file
diff --git a/app/src/main/res/values/mcuSources.xml b/app/src/main/res/values/mcuSources.xml
deleted file mode 100644
index e537414..0000000
--- a/app/src/main/res/values/mcuSources.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
- - KSW-Logcat
- - /dev/ttyMSM0
- - /dev/ttyMSM1
- - /dev/ttyS0
- - /dev/ttyS1
- - /dev/ttyS2
- - /dev/ttyS3
-
-
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8157531..58f4076 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,83 +1,3 @@
- KSW-ToolKit
- Force Sound in OEM Radio
- Init Volumes on Boot
- Start on Boot
- Sound Restorer
- Mcu Event Manager
- System Tweaks
- Adb Shell
- Mcu Listener
- Keep OEM Radio in Android
- Start App
- Invoke KeyEvent
- Save
- Do Nothing
- Switch Sound Source
- Init Mcu Volumes
- Unassigned
- Navigation Button
- Options Button
- Back Button
- Menu Button
- Knob Turn Right
- Car Radio Buttons
- Knob Turn Left
- Knob Tilt Right
- Knob Tilt Left
- Knob Tilt Down
- Knob Tilt Up
- Knob Press
- Drive Knob Buttons
- Media Play/Pause
- Media Next
- Media Previous
- Telephone HangUp
- Telephone Long Press
- Telephone Button
- Voice Command Button
- Steering Wheel Buttons
- Mode Button
- Hide Topbar
- Show Topbar
- Shrink Topbar
- Restore Topbar
- Change DPI
- Show Demo mode
- Enter Command
- Source:
- Stop KSW on boot
- KSW Service
- Import Config
- Export Config
- Restart System
- Assigned
- Max Volume at Boot
- Auto Volume
- Start at Boot
- Clear Boot Animation
- 160
- Main Menu
- Import/Export Config
- Brightness:
- Car-Info
- Radio
- AUX
- DVR
- DVD
- Front Cam
- Open Source:
- frontCam
- Screen Off
- DTV
- Turn Screen Off
- Send MCU Command
- Volume- Button
- Volume+ Button
- Log Car Data
- Log Mcu Events
- Reroute NaviCallouts
- Give Tasker READ_LOGS permission
- Intercept McuCommmands
-
+ KSW-ToolKit-Service
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 7d6d86f..32a2e2b 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,52 +1,5 @@
+
-
-
-
-
-
-
-
-
-
-
-
diff --git a/build.gradle b/build.gradle
index cb350c5..c2664dd 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,8 +6,8 @@ buildscript {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:4.1.2'
- classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.21"
+ classpath 'com.android.tools.build:gradle:7.0.1'
+ classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.30'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index bff1157..3b85615 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
diff --git a/settings.gradle b/settings.gradle
index 6bb2fc4..a419d68 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,3 +1,3 @@
include ':app'
include ':McuCommunicator:library'
-rootProject.name = "KSW-ToolKit"
+rootProject.name = "KSW-ToolKit-Service"