diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 99f57f4..0d0ac5b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -66,6 +66,8 @@ android:name=".view.ElectricMarkerDetailActivity" android:theme="@style/Theme.ActivityDialogStyle" /> + + + + 0) { + onDataReceived(buffer, size) + } + } catch (e: IOException) { + e.printStackTrace() + return + } + } + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(initLayoutView()) + setupTopBarLayout() + initData(savedInstanceState) + observeRequestState() + initEvent() + + try { + serialPort = BaseApplication.get().getSerialPort() + outputStream = serialPort?.outputStream + inputStream = serialPort?.inputStream + + readThread = ReadThread() + readThread?.start() + } catch (e: SecurityException) { + "您没有串口的读写权限!".show(this) + } catch (e: IOException) { + "因为不明原因,串口无法打开!".show(this) + } catch (e: InvalidParameterException) { + "请检查串口!".show(this) + } + } + + /** + * 初始化xml布局 + */ + abstract fun initLayoutView(): Int + + /** + * 特定页面定制沉浸式状态栏 + */ + abstract fun setupTopBarLayout() + + /** + * 初始化默认数据 + */ + abstract fun initData(savedInstanceState: Bundle?) + + /** + * 数据请求状态监听 + */ + abstract fun observeRequestState() + + /** + * 初始化业务逻辑 + */ + abstract fun initEvent() + + /** + * 串口读数 + * */ + abstract fun onDataReceived(buffer: ByteArray?, size: Int) + + override fun onDestroy() { + super.onDestroy() + readThread?.interrupt() + BaseApplication.get().closeSerialPort() + serialPort = null + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 99f57f4..0d0ac5b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -66,6 +66,8 @@ android:name=".view.ElectricMarkerDetailActivity" android:theme="@style/Theme.ActivityDialogStyle" /> + + 0) { + onDataReceived(buffer, size) + } + } catch (e: IOException) { + e.printStackTrace() + return + } + } + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(initLayoutView()) + setupTopBarLayout() + initData(savedInstanceState) + observeRequestState() + initEvent() + + try { + serialPort = BaseApplication.get().getSerialPort() + outputStream = serialPort?.outputStream + inputStream = serialPort?.inputStream + + readThread = ReadThread() + readThread?.start() + } catch (e: SecurityException) { + "您没有串口的读写权限!".show(this) + } catch (e: IOException) { + "因为不明原因,串口无法打开!".show(this) + } catch (e: InvalidParameterException) { + "请检查串口!".show(this) + } + } + + /** + * 初始化xml布局 + */ + abstract fun initLayoutView(): Int + + /** + * 特定页面定制沉浸式状态栏 + */ + abstract fun setupTopBarLayout() + + /** + * 初始化默认数据 + */ + abstract fun initData(savedInstanceState: Bundle?) + + /** + * 数据请求状态监听 + */ + abstract fun observeRequestState() + + /** + * 初始化业务逻辑 + */ + abstract fun initEvent() + + /** + * 串口读数 + * */ + abstract fun onDataReceived(buffer: ByteArray?, size: Int) + + override fun onDestroy() { + super.onDestroy() + readThread?.interrupt() + BaseApplication.get().closeSerialPort() + serialPort = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt new file mode 100644 index 0000000..bfc12c2 --- /dev/null +++ b/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt @@ -0,0 +1,93 @@ +package com.casic.electric.detector.view + +import android.content.Context +import android.media.AudioAttributes +import android.media.SoundPool +import android.os.Bundle +import android.os.Handler +import android.os.Message +import android.util.Log +import android.view.KeyEvent +import com.casic.electric.detector.R +import com.casic.electric.detector.base.SerialPortActivity +import com.casic.electric.detector.extensions.initLayoutImmersionBar +import com.casic.electric.detector.utils.GpioManager +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.activity_install_label.* +import kotlinx.android.synthetic.main.include_base_title.* + +class InstallLabelActivity : SerialPortActivity(), Handler.Callback { + + private val kTag = "LabelActivity" + private val context: Context = this@InstallLabelActivity + private val gpioManager by lazy { GpioManager() } + private var soundResId = 0 + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var soundPool: SoundPool + + override fun initLayoutView(): Int = R.layout.activity_install_label + + override fun setupTopBarLayout() { + titleView.text = "安装新标识器" + titleView.setTextColor(R.color.themeColor.convertColor(this)) + + ImmersionBar.with(this) + .statusBarDarkFont(true) + .statusBarColor(R.color.mainBackground) + .init() + initLayoutImmersionBar(rootView) + } + + override fun initData(savedInstanceState: Bundle?) { + weakReferenceHandler = WeakReferenceHandler(this) + + val audioAttributes = AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .build() + soundPool = SoundPool.Builder() + .setMaxStreams(16) + .setAudioAttributes(audioAttributes) + .build() + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } + + override fun onDataReceived(buffer: ByteArray?, size: Int) { + Log.d(kTag, "onDataReceived => " + buffer.contentToString()) + if (buffer != null) { + val message = weakReferenceHandler.obtainMessage() + message.what = 2023081701 + message.obj = buffer + weakReferenceHandler.sendMessage(message) + } + } + + override fun handleMessage(msg: Message): Boolean { + if (msg.what == 2023081701) { + + } + return true + } + + override fun onDestroy() { + soundPool.release() + gpioManager.setGpioLow("18") + super.onDestroy() + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + if (keyCode == KeyEvent.KEYCODE_BACK) { + soundPool.release() + } + return super.onKeyDown(keyCode, event) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 99f57f4..0d0ac5b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -66,6 +66,8 @@ android:name=".view.ElectricMarkerDetailActivity" android:theme="@style/Theme.ActivityDialogStyle" /> + + 0) { + onDataReceived(buffer, size) + } + } catch (e: IOException) { + e.printStackTrace() + return + } + } + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(initLayoutView()) + setupTopBarLayout() + initData(savedInstanceState) + observeRequestState() + initEvent() + + try { + serialPort = BaseApplication.get().getSerialPort() + outputStream = serialPort?.outputStream + inputStream = serialPort?.inputStream + + readThread = ReadThread() + readThread?.start() + } catch (e: SecurityException) { + "您没有串口的读写权限!".show(this) + } catch (e: IOException) { + "因为不明原因,串口无法打开!".show(this) + } catch (e: InvalidParameterException) { + "请检查串口!".show(this) + } + } + + /** + * 初始化xml布局 + */ + abstract fun initLayoutView(): Int + + /** + * 特定页面定制沉浸式状态栏 + */ + abstract fun setupTopBarLayout() + + /** + * 初始化默认数据 + */ + abstract fun initData(savedInstanceState: Bundle?) + + /** + * 数据请求状态监听 + */ + abstract fun observeRequestState() + + /** + * 初始化业务逻辑 + */ + abstract fun initEvent() + + /** + * 串口读数 + * */ + abstract fun onDataReceived(buffer: ByteArray?, size: Int) + + override fun onDestroy() { + super.onDestroy() + readThread?.interrupt() + BaseApplication.get().closeSerialPort() + serialPort = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt new file mode 100644 index 0000000..bfc12c2 --- /dev/null +++ b/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt @@ -0,0 +1,93 @@ +package com.casic.electric.detector.view + +import android.content.Context +import android.media.AudioAttributes +import android.media.SoundPool +import android.os.Bundle +import android.os.Handler +import android.os.Message +import android.util.Log +import android.view.KeyEvent +import com.casic.electric.detector.R +import com.casic.electric.detector.base.SerialPortActivity +import com.casic.electric.detector.extensions.initLayoutImmersionBar +import com.casic.electric.detector.utils.GpioManager +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.activity_install_label.* +import kotlinx.android.synthetic.main.include_base_title.* + +class InstallLabelActivity : SerialPortActivity(), Handler.Callback { + + private val kTag = "LabelActivity" + private val context: Context = this@InstallLabelActivity + private val gpioManager by lazy { GpioManager() } + private var soundResId = 0 + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var soundPool: SoundPool + + override fun initLayoutView(): Int = R.layout.activity_install_label + + override fun setupTopBarLayout() { + titleView.text = "安装新标识器" + titleView.setTextColor(R.color.themeColor.convertColor(this)) + + ImmersionBar.with(this) + .statusBarDarkFont(true) + .statusBarColor(R.color.mainBackground) + .init() + initLayoutImmersionBar(rootView) + } + + override fun initData(savedInstanceState: Bundle?) { + weakReferenceHandler = WeakReferenceHandler(this) + + val audioAttributes = AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .build() + soundPool = SoundPool.Builder() + .setMaxStreams(16) + .setAudioAttributes(audioAttributes) + .build() + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } + + override fun onDataReceived(buffer: ByteArray?, size: Int) { + Log.d(kTag, "onDataReceived => " + buffer.contentToString()) + if (buffer != null) { + val message = weakReferenceHandler.obtainMessage() + message.what = 2023081701 + message.obj = buffer + weakReferenceHandler.sendMessage(message) + } + } + + override fun handleMessage(msg: Message): Boolean { + if (msg.what == 2023081701) { + + } + return true + } + + override fun onDestroy() { + soundPool.release() + gpioManager.setGpioLow("18") + super.onDestroy() + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + if (keyCode == KeyEvent.KEYCODE_BACK) { + soundPool.release() + } + return super.onKeyDown(keyCode, event) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/electric/detector/view/InstallSmallLabelActivity.kt b/app/src/main/java/com/casic/electric/detector/view/InstallSmallLabelActivity.kt new file mode 100644 index 0000000..0eb09ef --- /dev/null +++ b/app/src/main/java/com/casic/electric/detector/view/InstallSmallLabelActivity.kt @@ -0,0 +1,93 @@ +package com.casic.electric.detector.view + +import android.content.Context +import android.media.AudioAttributes +import android.media.SoundPool +import android.os.Bundle +import android.os.Handler +import android.os.Message +import android.util.Log +import android.view.KeyEvent +import com.casic.electric.detector.R +import com.casic.electric.detector.base.SerialPortActivity +import com.casic.electric.detector.extensions.initLayoutImmersionBar +import com.casic.electric.detector.utils.GpioManager +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.activity_install_small_label.* +import kotlinx.android.synthetic.main.include_base_title.* + +class InstallSmallLabelActivity : SerialPortActivity(), Handler.Callback { + + private val kTag = "SmallLabelActivity" + private val context: Context = this@InstallSmallLabelActivity + private val gpioManager by lazy { GpioManager() } + private var soundResId = 0 + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var soundPool: SoundPool + + override fun initLayoutView(): Int = R.layout.activity_install_small_label + + override fun setupTopBarLayout() { + titleView.text = "安装新电子标签" + titleView.setTextColor(R.color.themeColor.convertColor(this)) + + ImmersionBar.with(this) + .statusBarDarkFont(true) + .statusBarColor(R.color.mainBackground) + .init() + initLayoutImmersionBar(rootView) + } + + override fun initData(savedInstanceState: Bundle?) { + weakReferenceHandler = WeakReferenceHandler(this) + + val audioAttributes = AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .build() + soundPool = SoundPool.Builder() + .setMaxStreams(16) + .setAudioAttributes(audioAttributes) + .build() + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } + + override fun onDataReceived(buffer: ByteArray?, size: Int) { + Log.d(kTag, "onDataReceived => " + buffer.contentToString()) + if (buffer != null) { + val message = weakReferenceHandler.obtainMessage() + message.what = 2023081702 + message.obj = buffer + weakReferenceHandler.sendMessage(message) + } + } + + override fun handleMessage(msg: Message): Boolean { + if (msg.what == 2023081702) { + + } + return true + } + + override fun onDestroy() { + soundPool.release() + gpioManager.setGpioLow("18") + super.onDestroy() + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + if (keyCode == KeyEvent.KEYCODE_BACK) { + soundPool.release() + } + return super.onKeyDown(keyCode, event) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 99f57f4..0d0ac5b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -66,6 +66,8 @@ android:name=".view.ElectricMarkerDetailActivity" android:theme="@style/Theme.ActivityDialogStyle" /> + + 0) { + onDataReceived(buffer, size) + } + } catch (e: IOException) { + e.printStackTrace() + return + } + } + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(initLayoutView()) + setupTopBarLayout() + initData(savedInstanceState) + observeRequestState() + initEvent() + + try { + serialPort = BaseApplication.get().getSerialPort() + outputStream = serialPort?.outputStream + inputStream = serialPort?.inputStream + + readThread = ReadThread() + readThread?.start() + } catch (e: SecurityException) { + "您没有串口的读写权限!".show(this) + } catch (e: IOException) { + "因为不明原因,串口无法打开!".show(this) + } catch (e: InvalidParameterException) { + "请检查串口!".show(this) + } + } + + /** + * 初始化xml布局 + */ + abstract fun initLayoutView(): Int + + /** + * 特定页面定制沉浸式状态栏 + */ + abstract fun setupTopBarLayout() + + /** + * 初始化默认数据 + */ + abstract fun initData(savedInstanceState: Bundle?) + + /** + * 数据请求状态监听 + */ + abstract fun observeRequestState() + + /** + * 初始化业务逻辑 + */ + abstract fun initEvent() + + /** + * 串口读数 + * */ + abstract fun onDataReceived(buffer: ByteArray?, size: Int) + + override fun onDestroy() { + super.onDestroy() + readThread?.interrupt() + BaseApplication.get().closeSerialPort() + serialPort = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt new file mode 100644 index 0000000..bfc12c2 --- /dev/null +++ b/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt @@ -0,0 +1,93 @@ +package com.casic.electric.detector.view + +import android.content.Context +import android.media.AudioAttributes +import android.media.SoundPool +import android.os.Bundle +import android.os.Handler +import android.os.Message +import android.util.Log +import android.view.KeyEvent +import com.casic.electric.detector.R +import com.casic.electric.detector.base.SerialPortActivity +import com.casic.electric.detector.extensions.initLayoutImmersionBar +import com.casic.electric.detector.utils.GpioManager +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.activity_install_label.* +import kotlinx.android.synthetic.main.include_base_title.* + +class InstallLabelActivity : SerialPortActivity(), Handler.Callback { + + private val kTag = "LabelActivity" + private val context: Context = this@InstallLabelActivity + private val gpioManager by lazy { GpioManager() } + private var soundResId = 0 + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var soundPool: SoundPool + + override fun initLayoutView(): Int = R.layout.activity_install_label + + override fun setupTopBarLayout() { + titleView.text = "安装新标识器" + titleView.setTextColor(R.color.themeColor.convertColor(this)) + + ImmersionBar.with(this) + .statusBarDarkFont(true) + .statusBarColor(R.color.mainBackground) + .init() + initLayoutImmersionBar(rootView) + } + + override fun initData(savedInstanceState: Bundle?) { + weakReferenceHandler = WeakReferenceHandler(this) + + val audioAttributes = AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .build() + soundPool = SoundPool.Builder() + .setMaxStreams(16) + .setAudioAttributes(audioAttributes) + .build() + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } + + override fun onDataReceived(buffer: ByteArray?, size: Int) { + Log.d(kTag, "onDataReceived => " + buffer.contentToString()) + if (buffer != null) { + val message = weakReferenceHandler.obtainMessage() + message.what = 2023081701 + message.obj = buffer + weakReferenceHandler.sendMessage(message) + } + } + + override fun handleMessage(msg: Message): Boolean { + if (msg.what == 2023081701) { + + } + return true + } + + override fun onDestroy() { + soundPool.release() + gpioManager.setGpioLow("18") + super.onDestroy() + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + if (keyCode == KeyEvent.KEYCODE_BACK) { + soundPool.release() + } + return super.onKeyDown(keyCode, event) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/electric/detector/view/InstallSmallLabelActivity.kt b/app/src/main/java/com/casic/electric/detector/view/InstallSmallLabelActivity.kt new file mode 100644 index 0000000..0eb09ef --- /dev/null +++ b/app/src/main/java/com/casic/electric/detector/view/InstallSmallLabelActivity.kt @@ -0,0 +1,93 @@ +package com.casic.electric.detector.view + +import android.content.Context +import android.media.AudioAttributes +import android.media.SoundPool +import android.os.Bundle +import android.os.Handler +import android.os.Message +import android.util.Log +import android.view.KeyEvent +import com.casic.electric.detector.R +import com.casic.electric.detector.base.SerialPortActivity +import com.casic.electric.detector.extensions.initLayoutImmersionBar +import com.casic.electric.detector.utils.GpioManager +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.activity_install_small_label.* +import kotlinx.android.synthetic.main.include_base_title.* + +class InstallSmallLabelActivity : SerialPortActivity(), Handler.Callback { + + private val kTag = "SmallLabelActivity" + private val context: Context = this@InstallSmallLabelActivity + private val gpioManager by lazy { GpioManager() } + private var soundResId = 0 + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var soundPool: SoundPool + + override fun initLayoutView(): Int = R.layout.activity_install_small_label + + override fun setupTopBarLayout() { + titleView.text = "安装新电子标签" + titleView.setTextColor(R.color.themeColor.convertColor(this)) + + ImmersionBar.with(this) + .statusBarDarkFont(true) + .statusBarColor(R.color.mainBackground) + .init() + initLayoutImmersionBar(rootView) + } + + override fun initData(savedInstanceState: Bundle?) { + weakReferenceHandler = WeakReferenceHandler(this) + + val audioAttributes = AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .build() + soundPool = SoundPool.Builder() + .setMaxStreams(16) + .setAudioAttributes(audioAttributes) + .build() + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } + + override fun onDataReceived(buffer: ByteArray?, size: Int) { + Log.d(kTag, "onDataReceived => " + buffer.contentToString()) + if (buffer != null) { + val message = weakReferenceHandler.obtainMessage() + message.what = 2023081702 + message.obj = buffer + weakReferenceHandler.sendMessage(message) + } + } + + override fun handleMessage(msg: Message): Boolean { + if (msg.what == 2023081702) { + + } + return true + } + + override fun onDestroy() { + soundPool.release() + gpioManager.setGpioLow("18") + super.onDestroy() + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + if (keyCode == KeyEvent.KEYCODE_BACK) { + soundPool.release() + } + return super.onKeyDown(keyCode, event) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/electric/detector/view/MainActivity.kt b/app/src/main/java/com/casic/electric/detector/view/MainActivity.kt index 3882a9f..93f4e16 100644 --- a/app/src/main/java/com/casic/electric/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/electric/detector/view/MainActivity.kt @@ -223,7 +223,7 @@ SamplePopupWindow.OnPopupWindowClickListener { override fun onPopupItemClicked(position: Int) { when (position) { - 0 -> updateTaskData() + 0 -> updateLabels() // 1 -> downloadTask() 2 -> versionViewModel.getApplicationVersion() // 3 -> uploadEvent() @@ -234,7 +234,24 @@ //安装。上传,然后存入本地库 installButton.setOnClickListener { -// navigatePageTo() + AlertControlDialog.Builder() + .setContext(context) + .setTitle("提示") + .setMessage("请选择安装对象") + .setPositiveButton("标识器") + .setNegativeButton("电子标签") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + //标识器 + navigatePageTo() + } + + override fun onCancelClick() { + //电子标签 + navigatePageTo() + } + }).build().show() } //查看 @@ -398,7 +415,7 @@ } //更新数据 - private fun updateTaskData() { + private fun updateLabels() { AlertControlDialog.Builder() .setContext(this) .setTitle("提示") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 99f57f4..0d0ac5b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -66,6 +66,8 @@ android:name=".view.ElectricMarkerDetailActivity" android:theme="@style/Theme.ActivityDialogStyle" /> + + 0) { + onDataReceived(buffer, size) + } + } catch (e: IOException) { + e.printStackTrace() + return + } + } + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(initLayoutView()) + setupTopBarLayout() + initData(savedInstanceState) + observeRequestState() + initEvent() + + try { + serialPort = BaseApplication.get().getSerialPort() + outputStream = serialPort?.outputStream + inputStream = serialPort?.inputStream + + readThread = ReadThread() + readThread?.start() + } catch (e: SecurityException) { + "您没有串口的读写权限!".show(this) + } catch (e: IOException) { + "因为不明原因,串口无法打开!".show(this) + } catch (e: InvalidParameterException) { + "请检查串口!".show(this) + } + } + + /** + * 初始化xml布局 + */ + abstract fun initLayoutView(): Int + + /** + * 特定页面定制沉浸式状态栏 + */ + abstract fun setupTopBarLayout() + + /** + * 初始化默认数据 + */ + abstract fun initData(savedInstanceState: Bundle?) + + /** + * 数据请求状态监听 + */ + abstract fun observeRequestState() + + /** + * 初始化业务逻辑 + */ + abstract fun initEvent() + + /** + * 串口读数 + * */ + abstract fun onDataReceived(buffer: ByteArray?, size: Int) + + override fun onDestroy() { + super.onDestroy() + readThread?.interrupt() + BaseApplication.get().closeSerialPort() + serialPort = null + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt b/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt new file mode 100644 index 0000000..bfc12c2 --- /dev/null +++ b/app/src/main/java/com/casic/electric/detector/view/InstallLabelActivity.kt @@ -0,0 +1,93 @@ +package com.casic.electric.detector.view + +import android.content.Context +import android.media.AudioAttributes +import android.media.SoundPool +import android.os.Bundle +import android.os.Handler +import android.os.Message +import android.util.Log +import android.view.KeyEvent +import com.casic.electric.detector.R +import com.casic.electric.detector.base.SerialPortActivity +import com.casic.electric.detector.extensions.initLayoutImmersionBar +import com.casic.electric.detector.utils.GpioManager +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.activity_install_label.* +import kotlinx.android.synthetic.main.include_base_title.* + +class InstallLabelActivity : SerialPortActivity(), Handler.Callback { + + private val kTag = "LabelActivity" + private val context: Context = this@InstallLabelActivity + private val gpioManager by lazy { GpioManager() } + private var soundResId = 0 + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var soundPool: SoundPool + + override fun initLayoutView(): Int = R.layout.activity_install_label + + override fun setupTopBarLayout() { + titleView.text = "安装新标识器" + titleView.setTextColor(R.color.themeColor.convertColor(this)) + + ImmersionBar.with(this) + .statusBarDarkFont(true) + .statusBarColor(R.color.mainBackground) + .init() + initLayoutImmersionBar(rootView) + } + + override fun initData(savedInstanceState: Bundle?) { + weakReferenceHandler = WeakReferenceHandler(this) + + val audioAttributes = AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .build() + soundPool = SoundPool.Builder() + .setMaxStreams(16) + .setAudioAttributes(audioAttributes) + .build() + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } + + override fun onDataReceived(buffer: ByteArray?, size: Int) { + Log.d(kTag, "onDataReceived => " + buffer.contentToString()) + if (buffer != null) { + val message = weakReferenceHandler.obtainMessage() + message.what = 2023081701 + message.obj = buffer + weakReferenceHandler.sendMessage(message) + } + } + + override fun handleMessage(msg: Message): Boolean { + if (msg.what == 2023081701) { + + } + return true + } + + override fun onDestroy() { + soundPool.release() + gpioManager.setGpioLow("18") + super.onDestroy() + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + if (keyCode == KeyEvent.KEYCODE_BACK) { + soundPool.release() + } + return super.onKeyDown(keyCode, event) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/electric/detector/view/InstallSmallLabelActivity.kt b/app/src/main/java/com/casic/electric/detector/view/InstallSmallLabelActivity.kt new file mode 100644 index 0000000..0eb09ef --- /dev/null +++ b/app/src/main/java/com/casic/electric/detector/view/InstallSmallLabelActivity.kt @@ -0,0 +1,93 @@ +package com.casic.electric.detector.view + +import android.content.Context +import android.media.AudioAttributes +import android.media.SoundPool +import android.os.Bundle +import android.os.Handler +import android.os.Message +import android.util.Log +import android.view.KeyEvent +import com.casic.electric.detector.R +import com.casic.electric.detector.base.SerialPortActivity +import com.casic.electric.detector.extensions.initLayoutImmersionBar +import com.casic.electric.detector.utils.GpioManager +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.utils.WeakReferenceHandler +import kotlinx.android.synthetic.main.activity_install_small_label.* +import kotlinx.android.synthetic.main.include_base_title.* + +class InstallSmallLabelActivity : SerialPortActivity(), Handler.Callback { + + private val kTag = "SmallLabelActivity" + private val context: Context = this@InstallSmallLabelActivity + private val gpioManager by lazy { GpioManager() } + private var soundResId = 0 + private lateinit var weakReferenceHandler: WeakReferenceHandler + private lateinit var soundPool: SoundPool + + override fun initLayoutView(): Int = R.layout.activity_install_small_label + + override fun setupTopBarLayout() { + titleView.text = "安装新电子标签" + titleView.setTextColor(R.color.themeColor.convertColor(this)) + + ImmersionBar.with(this) + .statusBarDarkFont(true) + .statusBarColor(R.color.mainBackground) + .init() + initLayoutImmersionBar(rootView) + } + + override fun initData(savedInstanceState: Bundle?) { + weakReferenceHandler = WeakReferenceHandler(this) + + val audioAttributes = AudioAttributes.Builder() + .setUsage(AudioAttributes.USAGE_MEDIA) + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .build() + soundPool = SoundPool.Builder() + .setMaxStreams(16) + .setAudioAttributes(audioAttributes) + .build() + } + + override fun observeRequestState() { + + } + + override fun initEvent() { + + } + + override fun onDataReceived(buffer: ByteArray?, size: Int) { + Log.d(kTag, "onDataReceived => " + buffer.contentToString()) + if (buffer != null) { + val message = weakReferenceHandler.obtainMessage() + message.what = 2023081702 + message.obj = buffer + weakReferenceHandler.sendMessage(message) + } + } + + override fun handleMessage(msg: Message): Boolean { + if (msg.what == 2023081702) { + + } + return true + } + + override fun onDestroy() { + soundPool.release() + gpioManager.setGpioLow("18") + super.onDestroy() + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + if (keyCode == KeyEvent.KEYCODE_BACK) { + soundPool.release() + } + return super.onKeyDown(keyCode, event) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/electric/detector/view/MainActivity.kt b/app/src/main/java/com/casic/electric/detector/view/MainActivity.kt index 3882a9f..93f4e16 100644 --- a/app/src/main/java/com/casic/electric/detector/view/MainActivity.kt +++ b/app/src/main/java/com/casic/electric/detector/view/MainActivity.kt @@ -223,7 +223,7 @@ SamplePopupWindow.OnPopupWindowClickListener { override fun onPopupItemClicked(position: Int) { when (position) { - 0 -> updateTaskData() + 0 -> updateLabels() // 1 -> downloadTask() 2 -> versionViewModel.getApplicationVersion() // 3 -> uploadEvent() @@ -234,7 +234,24 @@ //安装。上传,然后存入本地库 installButton.setOnClickListener { -// navigatePageTo() + AlertControlDialog.Builder() + .setContext(context) + .setTitle("提示") + .setMessage("请选择安装对象") + .setPositiveButton("标识器") + .setNegativeButton("电子标签") + .setOnDialogButtonClickListener(object : + AlertControlDialog.OnDialogButtonClickListener { + override fun onConfirmClick() { + //标识器 + navigatePageTo() + } + + override fun onCancelClick() { + //电子标签 + navigatePageTo() + } + }).build().show() } //查看 @@ -398,7 +415,7 @@ } //更新数据 - private fun updateTaskData() { + private fun updateLabels() { AlertControlDialog.Builder() .setContext(this) .setTitle("提示") diff --git a/app/src/main/res/layout/activity_install_label.xml b/app/src/main/res/layout/activity_install_label.xml new file mode 100644 index 0000000..3fd064d --- /dev/null +++ b/app/src/main/res/layout/activity_install_label.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +